Paul
Paul

Reputation: 1483

TFS Build 2013 avoid code analysis

How can I avoid code analysis running on TFS Builds at a solution level?

I understand I can do this at a project level, but there are over 200 projects in my C# solution and I'd like to switch off Code Analysis at solution level if its possible.

I still need to run code analysis on developers machines.

I want to save time by not running code analysis on a specific TFS Build (we use SonarQube for CodeAnalysis on a separate build pipeline and so we don't need TFS Build to do it's own Code Analysis)

I have tried the following in my MSBuild arguments :

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

(This is using the default TfcvTemplate.12.xaml)

But even with these changes I can still see from the build logs that Code Analysis is still occuring:

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

The full MSBuild arguments I use are:

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

I'm using Tools Version 14 coupled with Microsoft.Compilers NuGet package to allow C#6 on our TFS 2013 Build Server.

Is there a way to avoid running code analysis at solution level, using just the MSBuild args in a TFS2013 build definition?

Upvotes: 0

Views: 118

Answers (1)

jessehouwing
jessehouwing

Reputation: 114471

The RunCodeAnalysis property is used by the old style FxCop static binary analyzers. The new Roslyn Analyzers do not follow this setting.

There are two options...

You can create a Directory.Build.targets1 file in the root folder of your solution (you can create it during build if needed) and remove the analyzers just before the compiler is invoked:

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

You can include the TF_BUILD check to detect that you're inside a Team Build run.

You can also create a ruleset file that disables all rules and override that as part of the build:

/p:CodeAnalysisRuleSet=AllDisabled.ruleset

1) Not sure if this works with the Nuget compiler extensions.

Upvotes: 2

Related Questions