C# 使用MSBuild 14时禁用代码分析
我有一个包含几个C#6.0项目的.NET解决方案。每一个项目都引用了。在VisualStudio中,我可以区分构建和分析代码,但我不知道如何在命令行(例如在CI服务器上)上使用MSBuild v14.0来实现这一点。我正在使用以下选项调用C# 使用MSBuild 14时禁用代码分析,c#,visual-studio-2015,msbuild,msbuild-14.0,C#,Visual Studio 2015,Msbuild,Msbuild 14.0,我有一个包含几个C#6.0项目的.NET解决方案。每一个项目都引用了。在VisualStudio中,我可以区分构建和分析代码,但我不知道如何在命令行(例如在CI服务器上)上使用MSBuild v14.0来实现这一点。我正在使用以下选项调用msbuild mySolution.sln/t:Rebuild,但这些选项均无效: /p:runcodesanalysis=False /p:RunCodeAnalysisOnThisProject=False /p:RunCodeAnalysis=Fals
msbuild mySolution.sln/t:Rebuild
,但这些选项均无效:
/p:runcodesanalysis=False
/p:RunCodeAnalysisOnThisProject=False
/p:RunCodeAnalysis=False,RunCodeAnalysisOnThisProject=False
<Target Name="CoreCompileSolution">
<PropertyGroup>
<CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Always'">RunCodeAnalysis=true</CodeAnalysisOption>
<CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Never'">RunCodeAnalysis=false</CodeAnalysisOption>
<!-- ... -->
</PropertyGroup>
<!-- ... -->
</Target>
它实际上不受支持,但有一个解决方法: 在解决方案根文件夹中的{SolutionName}.sln.targets(msbuild<15.0)之后创建一个
目录.Build.targets
(msbuild>=v15.0),,并添加:
<Project>
<Target Name="DisableAnalyzers"
BeforeTargets="CoreCompile"
Condition="'$(UseRoslynAnalyzers)' == 'false'">
<!--
Disable analyzers via an MSBuild property settable on the command line.
-->
<ItemGroup>
<Analyzer Remove="@(Analyzer)" />
</ItemGroup>
</Target>
</Project>
在.Net 5
支持的项目中,您只需编辑.csproj
并添加:
false
禁用生成时的代码分析
false
在实时分析中禁用代码分析
false
阻止分析器在此项目上运行
我在单元测试项目中使用它,方法是将它添加到保存TargetFramework
的PropertyGroup
中,如下所示:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
<!--disable code analysis on this XUNIT Project-->
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
<RunAnalyzers>false</RunAnalyzers>
</PropertyGroup>
net5.0
假的
假的
假的
假的
有关更多详细信息,请参阅谢谢您的回复,但我们使用的不是TFS,而是Jenkins。无论如何,使用Never代替False不会改变行为。很抱歉延迟回复。我在Jenkins上创建了一个测试演示,runcodealysis=False,一切正常。你可以在答案中参考我的更新。谢谢你的回复。对我来说,将RunCodeAnalysis设置为False就像禁用StyleCop.Analyzers一样,很抱歉不够清晰。如果要排除来自StyleCop.Analyzers的MSBuild警告,我必须做什么?还是不可能?@mu88,你可以参考我答案中的更新2,看看它是否解决了你的问题。如果上面的答案解决了您的问题,您可以将其标记为“答案”,这样就可以帮助其他社区成员解决同样的问题。如果没有,你可以告诉我们你的问题。谢谢。谢谢你的更新,但我想在MSBuild级别而不是源代码中禁用StyleCop警告。相关:你尝试过这个吗?对我来说,它似乎不会在BeforeTargets=“CoreCompile”
上触发。我添加了一条在BeforeTargets=“Build”
上看到的消息,但它仍在尝试运行analyzers.Nuget、packages.config和after.solution.sln.targets(因为它是msbuild v14)。我发现了问题,我们将目标指定为msbuild的参数,如/t:Clean,Build
。这在msbuild>14和DisableAnalyzers目标工作时效果良好。但在使用msbuild 14时,这会导致DisableAnalyzers目标未触发。如果将目标添加到参数中,我们可以看到它以某种方式通过我们添加的日志消息运行,但它不会影响分析器。因此,我们的解决方案似乎是在使用msbuild 14时只使用默认目标,而不是显式地为msbuild提供目标。但奇怪的是,在不使用msbuild v14的显式目标参数时,它甚至不尝试运行分析器,不管DisableAnalyzers的目标是什么……你能用重要的细节对答案进行编辑吗。很高兴你找到了一个有效的解决方案!现在请尽快升级到MsBuild 16;)。
<Target Name="DisableAnalyzers"
BeforeTargets="CoreCompile"
Condition="
'$(UseRoslynAnalyzers)' == 'false'
or '$(RunCodeAnalysis)' == 'false'
or '$(RunCodeAnalysis)' == 'never'" >
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<IsPackable>false</IsPackable>
<!--disable code analysis on this XUNIT Project-->
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
<RunAnalyzers>false</RunAnalyzers>
</PropertyGroup>