使用MSBuild 14时禁用代码分析

时间:2017-04-28 13:51:42

标签: c# visual-studio-2015 msbuild

我有一个包含几个C#6.0项目的.NET解决方案。每个项目都引用StyleCop Analyzer via NuGet。在Visual Studio中,我可以区分构建和分析代码,但是我没有看到如何在命令行上使用MSBuild v14.0(例如,在CI服务器上)。我正在使用以下选项调用msbuild mySolution.sln /t:Rebuild,但这些选项都不起作用:

  • /p:RunCodeAnalysis=False
  • /p:RunCodeAnalysisOnThisProject=False
  • /p:RunCodeAnalysis=False,RunCodeAnalysisOnThisProject=False

无论我做什么,警告SAxxxx都会保留在输出中。有没有人知道如何在使用MSBuild时禁用代码分析?

背景:在我们的CI服务器上,我想区分“基本MSBuild警告”和来自静态代码分析的警告。

此致

3 个答案:

答案 0 :(得分:1)

  

任何人都知道在使用MSBuild时如何禁用代码分析?

构建服务器TFSBuild.proj中定义的RunCodeAnalysis设置与本地MSBuild项目架构选项有很大不同。

构建服务器支持RunCodeAnalysis的“始终,默认,从不”的值。相比之下,本地MSBuild支持RunCodeAnalysis的“真或假”。

您可以查看Microsoft.TeamFoundation.Build.targets文件的部分:

CoreData

由此我们可以推断“默认”设置不会为运行时提供值,而“始终”和“从不”分别映射到True / False。

在构建服务器上:

<Target Name="CoreCompileSolution">     <PropertyGroup>     <CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Always'">RunCodeAnalysis=true</CodeAnalysisOption>     <CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Never'">RunCodeAnalysis=false</CodeAnalysisOption>     <!-- ... -->   </PropertyGroup>   <!-- ... --> </Target> 告诉MSBuild使用RunCodeAnalysis = True

编译所有项目

Always告诉MSBuild在所有项目中禁止代码分析(RunCodeAnalysis = False)。

因此,RunCodeAnalysis的值为NeverDefault,Always,Never,具体取决于您的构建方式。

您可以参考How to: Edit a Build TypeCodeAnalysis, FxCop and Team Build了解更详细的信息。

<强>更新 根据mu88的回复,我使用True,False在Jenkins上创建了一个测试演示,代码分析按预期被禁用。以下是我在Jenkins上的配置:

enter image description here

此外,您还可以检查构建日志是否包含“RunCodeAnalysis=False”到“Running Code Analysis...”的部分 对于警告SAxxxx保留在输出中,这不是代码分析结果。您可以在Visual Studio上测试它而无需进行代码分析。安装包StyleCop.Analyzers后,然后构建项目,您将收到这些警告。

因此,在使用参数Code Analysis Complete构建项目后,请仔细检查Jenkins上的构建日志是否包含“Running Code Analysis...”和“Code Analysis Complete”部分。

<强> UPDATE2:

如果你想抑制StyleCop警告,你可以通过在.cs文件的顶部添加这个标题来诱骗StyleCop完全不处理文件:

:/p:RunCodeAnalysis=False

答案 1 :(得分:0)

它不受真正支持,但是有一种解决方法:

在解决方案根文件夹中创建一个 get userIsAuthenticated() { return this.user$.asObservable().pipe( map(user => { if (user) { console.log('userIsAuthenticated', !!user.authtoken); return !!user.authtoken; } else { console.log('UserIsAuthenticated exit with false value'); return false; } }) ); } (msbuild> = v15.0),Directory.Build.targets(msbuild <15.0)文件并添加:

After.{SolutionName}.sln.targets

您现在可以传入<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> 来删除项目中配置的所有分析器。

另请参阅:

您可以编辑条件以在/p:UseRosynAnalyzers=falseRunCodeAnalysis=False上触发。

Never

答案 2 :(得分:0)

.Net 5 支持的项目中,您只需编辑 .csproj 并添加:

  • <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild> 禁用构建代码分析
  • <RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis> 在实时分析中禁用代码分析
  • <RunAnalyzers>false</RunAnalyzers> 阻止分析器在此项目上运行

我在我的单元测试项目中使用它,方法是将它添加到包含 PropertyGroupTargetFramework 中,如下所示:

<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>

有关详细信息,请参阅MS Documentation