Msbuild TFS构建2013避免代码分析

Msbuild TFS构建2013避免代码分析,msbuild,tfsbuild,roslyn,fxcop,Msbuild,Tfsbuild,Roslyn,Fxcop,如何避免在解决方案级别上对TFS构建运行代码分析 我知道我可以在项目级别上这样做,但是我的C#解决方案中有200多个项目,如果可能的话,我想关闭解决方案级别的代码分析 我仍然需要在开发人员的机器上运行代码分析 我希望通过不在特定的TFS构建上运行代码分析来节省时间(我们在单独的构建管道上使用SonarQube进行代码分析,因此我们不需要TFS构建来进行自己的代码分析) 我在MSBuild参数中尝试了以下操作: /p:RunCodeAnalysis=false /p:RunCodeAnalysis

如何避免在解决方案级别上对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 
我正在使用Tools Version 14和Microsoft.Compilers NuGet软件包,以允许在TFS 2013构建服务器上使用C#6


有没有办法避免在解决方案级别仅使用TFS2013生成定义中的MSBuild args来运行代码分析?

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

有两种选择

您可以在解决方案的根文件夹中创建
目录.Build.targets
1文件(如果需要,您可以在生成过程中创建),并在调用编译器之前删除分析器:

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

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

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

有两种选择

您可以在解决方案的根文件夹中创建
目录.Build.targets
1文件(如果需要,您可以在生成过程中创建),并在调用编译器之前删除分析器:

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

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

RunCodeAnalysis=false
将使用旧的fxcop样式版本的代码分析。关闭Roslyn分析器有点困难:
runcodelanalysis=false
将关闭旧的fxcop风格的代码分析版本。关闭Roslyn分析器有点困难:规则集工作会影响所有分析器,所以这里提到的任何一种方法都会影响所有分析器,所以这里提到的任何一种方法都会影响所有分析器