我有一个包含几个C#6.0项目的.NET解决方案。每个项目都引用StyleCop Analyzer via NuGet。在Visual Studio中,我可以区分构建和分析代码,但是我看不到如何在命令行上(例如CI服务器上)使用MSBuild v14.0来做到这一点。我正在使用以下选项调用msbuild mySolution.sln /t:Rebuild
,但没有一个起作用:
/p:RunCodeAnalysis=False
/p:RunCodeAnalysisOnThisProject=False
/p:RunCodeAnalysis=False,RunCodeAnalysisOnThisProject=False
无论我做什么,警告SAxxxx都会保留在输出中。有谁知道如何在使用MSBuild时禁用代码分析?
背景:在我们的CI服务器上,我想区分“基本MSBuild警告”和来自静态代码分析的警告。
问候
最佳答案
在生成服务器TFSBuild.proj中定义的RunCodeAnalysis设置与本地MSBuild项目架构选项有很大不同。
构建服务器支持RunCodeAnalysis的“ Always,Default,Never ”值。相反,本地MSBuild对RunCodeAnalysis支持“ True或False ”。
您可以检查Microsoft.TeamFoundation.Build.targets文件的部分:
<Target Name="CoreCompileSolution">
<PropertyGroup>
<CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Always'">RunCodeAnalysis=true</CodeAnalysisOption>
<CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Never'">RunCodeAnalysis=false</CodeAnalysisOption>
<!-- ... -->
</PropertyGroup>
<!-- ... -->
</Target>
由此我们可以推断出“默认”设置没有为运行时提供值,而“始终”和“从不”分别映射为True / False。
在构建服务器上:
Always
告诉MSBuild使用RunCodeAnalysis = True编译所有项目Never
告诉MSBuild在所有项目上取消代码分析(RunCodeAnalysis = False)。因此,RunCodeAnalysis的值为
Default,Always,Never
或True,False
,具体取决于您的构建方式。您可以引用How to: Edit a Build Type和CodeAnalysis, FxCop and Team Build以获得更详细的信息。
更新:
根据mu88回答,我已经使用
RunCodeAnalysis=False
在Jenkins上创建了一个测试演示,代码分析已按预期禁用。以下是我在Jenkins上的配置:此外,您还可以检查构建日志中是否有从“
Running Code Analysis...
”到“Code Analysis Complete
”的部分并且对于警告SAxxxx仍保留在输出中,这不是代码分析结果。您可以在Visual Studio上对其进行测试,而无需进行代码分析。安装软件包StyleCop.Analyzers,然后构建项目后,您将收到这些警告。
因此,在使用参数
Running Code Analysis...
构建项目之后,请仔细检查Jenkins上的构建日志是否包含“Code Analysis Complete
”和“:/p:RunCodeAnalysis=False
”部分。Update2:
如果要禁止显示StyleCop警告,可以通过在.cs文件顶部添加以下 header 来欺骗StyleCop根本不处理文件:
//------------------------------------------------------------------------------
// <auto-generated>
// Well, not really. This is just a trick to get StyleCop off my back.
// </auto-generated>
//------------------------------------------------------------------------------