5

ビルド後のステップとは別に、必要なすべてのことを実行するだけの MSBuild スクリプトがあります (以前の質問MSBuild conditional Exec?を参照してください)。

私がやろうとしているのは、プロジェクトがビルドされた場合にのみ、多くの csproj ファイルをビルドし、オプションでビルド後の手順を実行することです。ビルド後のステップを常に実行したくありません。そうしないと、最終出力のタイムスタンプが不必要に変更されます (理由もなく、ビルド プロセスに非常に時間がかかります)。

私の MSBuild スクリプトでは、csproj ファイルごとに次のようなものがあります。

<Target Name="ProjectName">
   <MSBuild Projects="PathToProject" Properties="Configuration=$(buildtype)" />
</Target>

編集: 私が本当にやりたいことは、各プロジェクトで CoreCompile タスクがいつ実行されるかを検出することだと思います。条件でこれを確認する方法があれば?

何か案は?

私は MSBuild を初めて使用するので、完全に間違った方向に進んでいる可能性があります。

ありがとう、アラン

4

3 に答える 3

1

この問題の簡単な解決策を探した後、私はそれを見つけられず、最終的には機能するが最善の解決策ではないかもしれない独自の解決策を思いつきました。ただし、同じ問題を抱えている他の人と共有したかったので、少なくとも実用的な解決策が得られ、うまくいけば頭を悩ませることを大幅に減らすことができます.

要約すると、私がやりたかったことは、プロジェクトのビルド後にコマンド ライン ツールを実行することでしたが、アセンブリが更新された (タイムスタンプが変更された) 場合のみでした。これをすべてのプロジェクトのビルド後のセクションに入れたくなかったのは、ビルド サーバー (開発マシンではなく) でのみポストビルドを実行したかったからです。

メインの .proj ファイルでこれを外部から行う方法が見つからず、各 .csproj ファイルのビルド後のセクションを変更することになりました。ただし、次のような if 条件を前に付けました。

if '$(ExecuteCommand)' == 'true' command.exe

これは、コマンドが開発マシンで実行されることは決してないことを意味しますが、.proj ファイルからビルドを呼び出すと、次のようにそのフラグを true に設定できます。

<!-- Define common properties -->
<PropertyGroup>
    <ExecuteCommand>true</ExecuteCommand>
</PropertyGroup>

<Target Name="YourTarget">
    <!-- Build project -->
    <MSBuild Projects="Path to project" Properties="ExecuteCommand=$(ExecuteCommand)" />
</Target>

私が言ったように、私はそれが最も優雅な解決策だとは思いませんが、確かに機能し、当分の間私にとっては十分です. ただし、スクリプトを改善できるように、これを実現する適切な方法を知りたいと思っています。

ありがとう、アラン

于 2010-11-28T20:46:36.160 に答える