TFSビルドで最初の実行後にカスタムターゲットがスキップされます
-
06-07-2019 - |
質問
ビルドにカスタムターゲット(コピータスクのグループなど)があり、別の場所で変更を有効にするために数回呼び出す必要があります。ただし、これは最初に呼び出されたときにのみ実行され、その後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はより宣言的です。そのため、実行されたターゲットを追跡し、既に完了したターゲットを意図的にスキップします。
所属していません StackOverflow