12

MSBuildスクリプトを使用して複数のソリューションをコンパイルするソリューションファイルを継承しました。プロジェクトの大部分は分析とルールセットで構成されていますが、そうでない単体テストプロジェクトがいくつかあります。

分析がオンになっているプロジェクト:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug</OutputPath>
  <PlatformTarget>x86</PlatformTarget>
  <CodeAnalysisRuleSet>..\OurRules.ruleset</CodeAnalysisRuleSet>
  <RunCodeAnalysis>true</RunCodeAnalysis>
 </PropertyGroup>

分析がオフになっているプロジェクト:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug</OutputPath>
  <PlatformTarget>x86</PlatformTarget>
  <RunCodeAnalysis>false</RunCodeAnalysis>
 </PropertyGroup>

ビルドスクリプトを実行すると、一部のプロジェクトがプロジェクト設定を尊重していないようです。

msbuild.exe BuildScript.proj /p:SolutionRoot=%cd%; /p:Configuration=Debug /p:Platform:x86 /p:RunCodeAnalysis=True

出力フォルダーを確認すると、RunCodeAnalysisフラグがfalseに設定されているプロジェクトのカバレッジ分析xml出力が表示されます。誰かが私がここで何が起こっているのかを理解するのを手伝ってもらえますか?

4

2 に答える 2

20

私はそれを投稿した直後にこれを理解しました。

チームビルドは、RunCodeAnalysisに対して次の値をサポートします:AlwaysDefaultNever

対照的に、ローカルでは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>

これらの設定は、ソリューションファイルをコンパイルするときにmsbuildプロセスに渡されます。

つまり、次のようになります。

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

すべてのプロジェクトでコード分析(RunCodeAnalysis = False)を抑制するようにMSBuildに指示しないでください。

... RunCodeAnalysisの値を指定しないということは、MSBuildがプロジェクトファイルのRunCodeAnalysis設定を尊重することを意味します。したがって、デフォルト設定。

元の質問から/p:RunCodeAnalysisを削除するだけで、正しい結果が得られました。分析がオンになっているプロジェクトは、コード分析を実行します。設定のないプロジェクトは、余分な作業を実行しません。

これについての詳細はここで入手できます:http ://www.bryancook.net/2011/06/build-server-code-analysis-settings.html

于 2011-06-19T18:32:17.987 に答える
8

変化する:

<RunCodeAnalysis>false</RunCodeAnalysis>

に:

<RunCodeAnalysis>Never</RunCodeAnalysis>

...そしてそれがあなたの問題を解決するかどうか見てください。の有効な値は、ビルド方法に応じて、{、、}または{、}のいずれRunCodeAnalysisかになります。DefaultAlwaysNeverTrueFalse

詳細については、 「方法:ビルドタイプを編集する」の項目12を参照してください。

また、構築方法に応じたRunCodeAnalysisの設定の不整合については、次の記事を参照してください。不整合なRunCodeAnalysis値

于 2011-06-18T21:46:39.343 に答える