msbuild プロジェクト ファイルの 1 つに import ステートメントがあります。
<Import Project="$(ProjectDir)..\CommonProjectProperties\OurCommon.targets" Condition="Exists('$(ProjectDir)..\CommonProjectProperties\OurCommon.targets" />
インポートされた msbuild プロジェクトには、次のプロパティ グループがあります。
<PropertyGroup Condition="'$(Configuration)' == 'Debug' And '$(SolutionName)' == 'Ourwork' And Exists('$(ProjectDir)..\..\FXCopSettings\OurGlobal.ruleset')">
<CodeAnalysisRuleSet>$(ProjectDir)..\..\FXCopSettings\OurGlobal.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
<CodeAnalysisIgnoreGeneratedCode>True</CodeAnalysisIgnoreGeneratedCode>
<DefineConstants>$(DefineConstants);CODE_ANALYSIS</DefineConstants>
</PropertyGroup>
そして、次の項目グループ:
<When Condition="Exists('$(ProjectDir)\..\..\Solutions\FXCopSettings\GlobalSuppressions.cs') And Exists('$(ProjectDir)$(ProjectName).csproj')">
<ItemGroup>
<Compile Include="$(ProjectDir)\..\..\Solutions\FXCopSettings\GlobalSuppressions.cs" />
</ItemGroup>
</When>
基本的に私がやろうとしているのは、すべてのプロジェクト ファイルに上記のインポート ステートメントを含め、インポートしたプロジェクト ファイルだけを微調整して FXCop を実行するかどうかを操作することです。
問題は、コマンドラインから、これがすべて正常に機能することです (msbuild /t:build proj.sln /p:DefineConstants="CODE_ANALYSIS=true" のようなものを使用して設定する必要がある定数 CODE_ANALYSIS を除いて)。それで問題ありません。
VS 2010 IDE からは、まさに... 地獄です! VS がインポートされた msbuild プロジェクト ファイル内のすべてのものを尊重しているように「見えます」...
1) 含まれているファイルはグレー表示されます。つまり、「すべてのファイルを表示」している場合にのみ IDE に表示されます。これは、コンパイルされていないことを意味します。まったく同じ ItemGroup を親の msbuild プロジェクト ファイルにコピーすると、ソリューション エクスプローラーにファイルがグレー表示されずに表示され、コンパイルされたことを意味します。
2) 抑制ファイルは、コード分析を行うときに無視するオブジェクトを FXCop に指示するために使用されます。プロジェクトの一部として抑制ファイルを正しくコンパイルすると、FXCop はそれを無視するようです。これを読んでみると、明らかに CODE_ANALYSIS 定数をオンにする必要があります。インポートしたプロジェクト ファイルから実行したと思っていましたが、尊重されていません。VS IDE のプロジェクト プロパティ ウィンドウには、定義済みの定数として表示されますが。ここでも、DefinedConstants 宣言を親プロジェクト ファイルの 1 つに移動すると、IDE は定数を尊重します。
だから...これを2つの投稿に分ける必要があるかどうかはわかりませんが、ここに私の質問があります
.1)インポートされたプロジェクトファイルにリストされているファイルをIDEに尊重させてコンパイルさせるにはどうすればよいですか?
2) インポートされたプロジェクト ファイルで IDE が DefineConstants を尊重するようにするにはどうすればよいですか