web-dev-qa-db-ja.com

MSBuild14を使用するときにコード分析を無効にする

いくつかのC#6.0プロジェクトを含む.NETソリューションがあります。すべてのプロジェクトは NuGet経由のStyleCopアナライザー を参照します。 Visual Studio内で、コードのビルドと分析を区別する可能性がありますが、コマンドライン(CIサーバーなど)でMSBuildv14.0を使用してこれを行う方法がわかりません。次のオプションを使用してmsbuild mySolution.sln /t:Rebuildを呼び出していますが、いずれも機能しませんでした。

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

私が何をしても、警告SAxxxxは出力に残ります。 MSBuildを使用するときにコード分析を無効にする方法を知っている人はいますか?

背景:CIサーバーで、「基本的なMSBuild警告」と静的コード分析からの警告を区別したいと思います。

よろしく

13
mu88

mSBuildを使用するときにコード分析を無効にする方法を知っている人はいますか?

ビルドサーバーTFSBuild.projで定義されているRunCodeAnalysis設定は、ローカルのMSBuildプロジェクトスキーマオプションとは大幅に異なります。

ビルドサーバーは、RunCodeAnalysisの「Always、Default、Never」の値をサポートします。対照的に、ローカルではMSBuildはRunCodeAnalysisに対して「Trueまたは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>

このことから、「デフォルト」設定はランタイムに値を提供しないのに対し、「常に」と「決して」はそれぞれTrue/Falseにマップされると推測できます。

ビルドサーバーの場合:

Alwaysは、RunCodeAnalysis = TrueですべてのプロジェクトをコンパイルするようにMSBuildに指示します

Neverは、すべてのプロジェクトでコード分析(RunCodeAnalysis = False)を抑制するようにMSBuildに指示します。

したがって、RunCodeAnalysisの値は、ビルド方法に応じて、Default,Always,NeverまたはTrue,Falseのいずれかになります。

詳細については、 方法:ビルドタイプの編集 および CodeAnalysis、FxCop、およびチームビルド を参照してください。

更新:返信されたmu88によると、RunCodeAnalysis=Falseを使用してJenkinsでテストデモを作成しました。コード分析は期待どおりに無効になっています。以下は、Jenkinsでの私の構成です。

enter image description here

また、ビルドログで「Running Code Analysis...」から「Code Analysis Complete」までのセクションがあるかどうかを確認することもできます。また、警告SAxxxxが出力に残っている場合、これはコード分析の結果ではありません。コード分​​析なしでVisualStudioでテストできます。パッケージStyleCop.Analyzersをインストールし、プロジェクトをビルドすると、これらの警告が表示されます。

したがって、parameterRunning Code Analysis...を使用してプロジェクトをビルドした後、Jenkinsのビルドログにセクション「Code Analysis Complete」と「:/p:RunCodeAnalysis=False」が含まれているかどうかを再確認してください。

Update2:

StyleCop警告を抑制したい場合は、.csファイルの先頭に次のヘッダーを追加することで、StyleCopをだましてファイルをまったく処理しないようにすることができます。

//------------------------------------------------------------------------------
// <auto-generated>
// Well, not really. This is just a trick to get StyleCop off my back.
// </auto-generated>
//------------------------------------------------------------------------------
3
Leo Liu-MSFT

実際にはサポートされていませんが、回避策があります。

ソリューションのルートフォルダーに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>

ここで/p:UseRosynAnalyzers=falseを渡して、プロジェクトで構成されているすべてのアナライザーを削除できます。

参照:

条件を編集して、RunCodeAnalysis=FalseまたはNeverでもトリガーすることができます。

<Target Name="DisableAnalyzers" 
        BeforeTargets="CoreCompile" 
        Condition="
           '$(UseRoslynAnalyzers)' == 'false' 
           or '$(RunCodeAnalysis)' == 'false' 
           or '$(RunCodeAnalysis)' == 'never'" >
1
jessehouwing