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 を作成した。