質問

ビルドにカスタムターゲット(コピータスクのグループなど)があり、別の場所で変更を有効にするために数回呼び出す必要があります。ただし、これは最初に呼び出されたときにのみ実行され、その後TFSビルドは上記のターゲットをスキップします。

プロセスは次のとおりです。

<!-- Copy some files to another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

...

<!-- Copy the above files to yet another location -->
<CallTarget Targets="CopyFiles"></CallTarget>

ビルドログでは、ターゲットの「CopyFiles」 2回目の呼び出しではスキップされます:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

これはなぜ起こっているのですか?ターゲット(または作成したカスタムターゲット)を強制的に複数回実行する方法はありますか?

役に立ちましたか?

解決

パラメータセットごとに、MSBuildインスタンスごとに1回呼び出す必要があります。チームビルドは、状況によっては(たとえば、複数のソリューション構成を提供する場合)、MSBuildの個別のインスタンスをスピンオフします。しかし、それはおそらくあなたを助けません。

シナリオにより適した、MSBuildは、異なるパラメータのセットで呼び出した場合にタスクを再実行します。探している機能のように聞こえる2つの異なるファイルセットをコピーする場合。

<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=1" />
<!--  ....  -->
<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=2" />

他の解決策は、機能をターゲットではなくタスクにリファクタリングすることです。宣言型と手続き型の癖がまだありますが、タスクは「関数」と考えるものにはるかに近い動作をします。より使い慣れた言語から。

他のヒント

これは仕様です。ターゲットを「メソッド」と見なすべきではありません。 MSBuildはより宣言的です。そのため、実行されたターゲットを追跡し、既に完了したターゲットを意図的にスキップします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top