プロジェクト レベルでは、次の 3 つのオプションがあります。
1) ビルド前のアクション
<PropertyGroup>
<PreBuildEvent>notepad.exe Foo.txt</PreBuildEvent>
</PropertyGroup>
2) 通常の BeforeBuild ターゲット
<Target Name="BeforeBuild">
<Exec Command="notepad.exe Foo.txt" />
</Target>
3)「Build」ターゲットに「接続」(stijnが提案したように)
<Target Name="BeforeBuild2" BeforeTargets="Build">
<Exec Command="notepad.exe Foo.txt" />
</Target>
DependsOnTargetsはBeforeTargetsの前に実行されるため、実際にはこのソリューション (ビルドの場合) は機能しません。そして、まさに DependsOnTargets に実際の (CoreBuild) が置かれています :) これが、彼らが「BeforeBuild」ターゲットを考案した理由です ;)
どちらの場合も、VS は何かが変更されているかどうかを確認します (ファイルは最新です)。何も変更されていないのに、なぜ外部プログラムを実行したいのですか? このプログラムがファイル (例: "コンテンツ") で動作する場合、msbuild と VS はファイルを古いものとして検出し、ビルドを処理する必要があります。
残念ながら、IDE (Visual Studio) には、msbuild プロジェクトを処理するための独自の方法があります。主なメカニズムは同じですが、どのプロジェクトをビルドするか、またはどの順序でビルドするかを決定するときは、VS の動作がまったく異なります。
外部ツールを使用して、ソリューションまたはプロジェクトに対して "msbuild" を実行できます。これも「適切な方法」でコンパイルされ、バイナリは同じですが、MsBuild のすべての機能と可能性を利用できます。