2012-02-28 8 views
3

ビルドターゲットの後にVisual Studioプロジェクトファイルの作成後に長いアフタービルドプロセスがあります。Visual Studioプロジェクト - MSBuildターゲット - AfterBuild - 条件 - バイナリファイルが更新された場合のみ

問題は、実際のソースコードが変更されておらず、プロジェクトがコンパイルされていなくても、ビルド時に常にAfterBuildターゲットを実行することです。

これは、プロジェクトがコンパイルされ、物理バイナリがディスクに書き込まれたり更新されたりしたときにのみ実行できますか?

<Target Name="AfterBuild"> 

<Exec Command="&quot;$(ProgramFiles)\Microsoft\ILMerge\ILMerge.exe&quot; /copyattrs /log /target:library /targetplatform:4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /Lib:&quot;$(TargetDir)\&quot; /keyfile:&quot;$(ProjectDir)\Plugin.snk&quot; /out:&quot;$(TargetDir)\$(AssemblyName).merged.dll&quot; &quot;$(AssemblyName).dll&quot; &quot;PluginCommandCommon.dll&quot; &quot;Common.dll&quot;" /> 

<Copy SourceFiles="$(TargetDir)\$(AssemblyName).merged.dll" DestinationFolder="$(ProjectDir)..\PluginPackage\bin\$(Configuration)\" /> 

</Target> 
+0

あなたは見てもよい: http://stackoverflow.com/questions/516227/suppressing-afterbuild-targets-a-csproj-has-been-built- –

+0

はい、これは答えがリンクであるかのように見え、もっと調査します – Simon

+0

本当にリンクの答えを理解できません私は何かが足りないと思う。効果的に私がしたいのは、プロジェクトが構築され、ファイルがbinディレクトリに書き込まれたときに、いくつかのmsビルドタスクを実行することだけです。 – Simon

答えて

-2

プロパティ>>ビルドイベントにはコンボボックスがあります。ビルド後イベントを実行します。これが意味するところです。

+0

時間をいただきありがとうございますが、それは私が探している答えではありません。 – Simon

4

オプション1:代わりにAfterBuild使用AfterRebuild(MSBuildのの多くの文書化されていない機能の1つ)の :

<Target Name="AfterRebuild" >...</Target> 

オプション2:

incremental buildの条件のいずれかをフックアップ:

<Target Name="AfterBuild" Condition=" '@(_SourceItemsToCopyToOutputDirectory)' != '' " > 

UPDATE

MSBuild Extension PackILMerge taskを使用するには、より良好に制御することができます、各ファイルの存在のためのIEのチェック:

<Target Name="ILMergeItems"> 
    <ItemGroup> 
     <Input Include="C:\b\MSBuild.ExtensionPack.dll"/> 
     <Input Include="C:\b\Ionic.Zip.dll"/> 
    </ItemGroup> 
    <MSBuild.ExtensionPack.Framework.ILMerge 
     Condition="Exists('%(Input.FullPath)')" 
     InputAssemblies="@(Input)" 
     OutputFile="C:\a\MyNewAssembly.dll"/> 
</Target> 
+0

OK、奇妙な結果で両方を試してみましたが、最初に起動するようではなく、後で必ず起動するとは限りません。たとえば、コードを追加してShift F6(現在のプロジェクトをビルド)を押すと、 – Simon

+0

最初は 'Rebuild'で実行する必要があります。 2番目は出力ファイルに変更がある場合です。あなたが求めていることではありませんか?あなたの質問を明確にしてください。 – KMoraz

+0

あなたの時間に感謝します。はい、それは私の要求ですが、欠落しているのはVisual Studioを使用していて、Visual Studioでこれらを試してみたら、単に期待通りに動作しません。上記の条件でDLLとターゲットAfterBuildの変更がロードされ、11個のファイルがbinフォルダにコピーされても実行できませんでしたか?私はbinフォルダ内のすべてのファイルを削除しようとしてもビルド時にターゲットを実行しません。何か案は? – Simon

関連する問題