TFS Build 2013 避免代码分析

Posted

技术标签:

【中文标题】TFS Build 2013 避免代码分析【英文标题】:TFS Build 2013 avoid code analysis 【发布时间】:2018-05-04 10:27:40 【问题描述】:

如何避免在解决方案级别在 TFS 构建上运行代码分析?

我知道我可以在项目级别执行此操作,但我的 C# 解决方案中有 200 多个项目,如果可能,我想关闭解决方案级别的代码分析。

我仍然需要在开发者机器上运行代码分析。

我想通过不在特定 TFS 构建上运行代码分析来节省时间(我们在单独的构建管道上使用 SonarQube 进行代码分析,因此我们不需要 TFS 构建来进行自己的代码分析)

我在我的 MSBuild 参数中尝试了以下内容:

/p:RunCodeAnalysis=false
/p:RunCodeAnalysis=Never 

(这是使用默认的 TfcvTemplate.12.xaml)

但即使进行了这些更改,我仍然可以从构建日志中看到代码分析仍在发生:

csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentropyva+ 
/debug:pdbonly /optimize+ /out:obj\Release\xyx.dll 
/ruleset:"..\Rule Sets\MinimumRecommendedRules.ruleset" 
/subsystemversion:6.00 /target:library /utf8output 
xyz.cs

我使用的完整 MSBuild 参数是:

/m /tv:14.0 /p:RunCodeAnalysis=false /p:GenerateProjectSpecificOutputFolder=True 

我正在使用工具版本 14 和 Microsoft.Compilers NuGet 包,以在我们的 TFS 2013 构建服务器上允许 C#6。

有没有办法避免在解决方案级别运行代码分析,只使用 TFS2013 构建定义中的 MSBuild 参数?

【问题讨论】:

RunCodeAnalysis=false 将转向旧的 fxcop 风格版本的代码分析。关闭 Roslyn 分析器有点困难:github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/1711 【参考方案1】:

RunCodeAnalysis 属性由旧式 FxCop 静态二进制分析器使用。新的 Roslyn 分析器不遵循此设置。

有两种选择...

您可以在解决方案的根文件夹中创建一个Directory.Build.targets1 文件(如果需要,您可以在构建期间创建它)并在调用编译器之前删除分析器:

<Target Name="DisableAnalyzersForBuild"
        BeforeTargets="CoreCompile"
        Condition="'$(TF_BUILD)'=='True'">
  <ItemGroup>
    <Analyzer Remove="@(Analyzer)"/>
  </ItemGroup>
</Target>

您可以包含 TF_BUILD 检查以检测您是否在 Team Build 运行中。

您还可以创建一个规则集文件来禁用所有规则并将其作为构建的一部分覆盖:

/p:CodeAnalysisRuleSet=AllDisabled.ruleset

1) 不确定这是否适用于 Nuget 编译器扩展。

【讨论】:

规则集适用于所有分析器,因此此处提到的任何一种方法都适用

以上是关于TFS Build 2013 避免代码分析的主要内容,如果未能解决你的问题,请参考以下文章

TFS2010:如果存在代码分析警告,则阻止签入

使用测试影响分析的 TFS 2013 和 VS 2013 能否与 NUnit 一起使用

java/maven项目的TFS代码分析

如何解决运行代码分析任务TFS中文件无法被索引两次错误?

Visual Studio 2013 代码分析挂在本机代码上

代码分析规则 CA1040:避免空接口,抱怨非空接口