7

* / .slnファイルをビルドするMSBuildファイルがあります(存在するすべての.slnファイルをビルドします)。

ビルドはビルドターゲットを使用するため、入力ファイルに変更が加えられていない場合は、プロジェクトを再ビルドしないでください。

プロジェクトが実際に再構築された場合にのみ、カスタムターゲットを実行したいと思います。

これはどのように行うことができますか?

コンパイル/ビルドが実際に行われるかどうかに関係なく、AfterBuildAfterCompileの両方が常に呼び出されます。

4

1 に答える 1

11

PostBuildEvent基本的に、たとえばと同じ動作が必要なので、どのように動作するかを調べましMicrosoft.Common.Targetsた(このファイルは、msbuildがどのように使用されるかについての優れた洞察を常に提供します)。解決策は次のとおりです。

<PropertyGroup>
  <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="RunWhenBuild" AfterTargets="CoreBuild"       
        Condition="'$(_AssemblyTimestampBeforeCompile)'!='$(_AssemblyTimestampAfterCompile)'">
  <Message Importance="high" Text="RunWhenBuild!!"/>
</Target>

そして、これが起こっていることです。ターゲットの依存関係の値で名前が付けられたプロパティがある場合RunPostBuildEvent、ビルドの前後に出力ファイルのタイムスタンプが最終的に記録されます。そして、それらが等しい場合、出力は構築されませんでした。したがって、残っているのは、ターゲットを実行して、これらのタイムスタンプをチェックすることだけです。OnOutputUpdatedCoreBuildCoreBuild

于 2012-12-20T14:53:13.837 に答える