csprojにTarget属性を複数定義すると再定義になる
やりたかったこと
コンパイル後の処理をある条件で分岐したい
試してみたこと
<Target Name="AfterCompile" Condition="A"> </Target> <Target Name="AfterCompile" Condition="B"> </Target>
こうしたときに条件Aのときにコンパイル後の処理が全然実行されない。
原因
公式のドキュメントにあるように、Target属性は複数定義した場合、再定義されている。
https://msdn.microsoft.com/ja-JP/library/ms171462.aspx?f=255&MSPPError=-2147217396
解決方法
下記を参考にした。
https://stackoverflow.com/questions/8709946/order-of-afterbuild-tasks-in-visual-studio-projects
<Target Name="AfterCompile"> <CallTarget Condition="A" Targets="Aのときにする処理" /> <CallTarget Condition="B" Targets="Bのときにする処理" /> Targets="OverwriteAppConfigByBuildTarget" /> </Target> <Target Name="Aのときにする処理"> 処理 </Target> <Target Name="Bのときにする処理"> 処理 </Target>
AfterCompile の Target の中で条件分岐して、新しく Target を作成した。