mu8*_*u88 10 c# msbuild visual-studio-2015 msbuild-14.0
我有一个包含多个C#6.0项目的.NET解决方案。每个项目都通过NuGet引用StyleCop Analyzer。在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警告”和来自静态代码分析的警告。
问候
有人知道如何在使用 MSBuild 时禁用代码分析吗?
生成服务器 TFSBuild.proj 中定义的 RunCodeAnalysis 设置与本地 MSBuild 项目架构选项有很大不同。
构建服务器支持RunCodeAnalysis的“ Always, Default, Never ”值。相比之下,本地 MSBuild 支持RunCodeAnalysis 的“ True or 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>
Run Code Online (Sandbox Code Playgroud)
由此我们可以推断出“默认”设置不会为运行时提供值,而“始终”和“从不”分别映射到 True/False。
在构建服务器上:
Always 告诉 MSBuild 使用 RunCodeAnalysis=True 编译所有项目
Never 告诉 MSBuild 禁止对所有项目进行代码分析 (RunCodeAnalysis=False)。
因此,RunCodeAnalysis 的值为Default,Always,Never或True,False,具体取决于您的构建方式。
您可以参考如何:编辑构建类型和代码分析、FxCop 和团队构建以获取更多详细信息。
更新:
根据 mu88 回复,我在 Jenkins 上创建了一个测试演示RunCodeAnalysis=False,代码分析按预期禁用。以下是我在 Jenkins 上的配置:
此外,您还可以检查构建日志是否有从“ Running Code Analysis...”到“ Code Analysis Complete”的部分,对于输出中保留的警告SAxxxx,这不是代码分析结果。您可以在 Visual Studio 上进行测试,无需进行代码分析。安装包 StyleCop.Analyzers 后,然后构建项目,您将收到这些警告。
所以请在使用参数构建项目后仔细检查Jenkins上的构建日志是否包含“ Running Code Analysis...”和“ Code Analysis Complete”部分:/p:RunCodeAnalysis=False。
更新2:
如果你想抑制 StyleCop 警告,你可以通过在 .cs 文件的顶部添加这个标题来欺骗 StyleCop 根本不处理文件:
//------------------------------------------------------------------------------
// <auto-generated>
// Well, not really. This is just a trick to get StyleCop off my back.
// </auto-generated>
//------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
它并不真正受支持,但有一个解决方法:
在您的解决方案根文件夹中创建一个Directory.Build.targets(msbuild >= v15.0), After.{SolutionName}.sln.targets(msbuild < 15.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>
Run Code Online (Sandbox Code Playgroud)
您/p:UseRoslynAnalyzers=false现在可以传入以删除项目中配置的所有分析器。
也可以看看:
您可以编辑条件以同时触发RunCodeAnalysis=False或Never。
<Target Name="DisableAnalyzers"
BeforeTargets="CoreCompile"
Condition="
'$(UseRoslynAnalyzers)' == 'false'
or '$(RunCodeAnalysis)' == 'false'
or '$(RunCodeAnalysis)' == 'never'" >
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4438 次 |
| 最近记录: |