24

Visual Studio プロジェクトでさまざまな条件の AfterBuild - タスクをいくつか定義しました。

<Target Name="AfterBuild" Condition="'$(Configuration)'=='FinalBuilder'">
    <Message Importance="high" Text="--- AfterBuild for FinalBuilder ---" />
</Target>
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <Message Importance="high" Text="--- AfterBuild for MvcBuildViews ---" />
</Target>

ただし、条件が一致する場合は、最後の 1 つだけが実行されます。FinalBuilder-Configuration を選択すると、AfterBuild タスクは無視され、実行されません。プロジェクト ファイル内のターゲットの順序を変更すると (Condition="'$(Configuration)'=='FinalBuilder'" が最後のものとして)、FinalBuilder-Configuration の AfterBuild は実行されますが、MvcBuildViews の AfterBuild は無視されます。

ターゲットの順序は重要ですか? 最後の AfterBuild タスクのみが考慮されますか? または、異なる条件で異なる AfterBuild タスクを定義するにはどうすればよいですか?

ありがとう

コンラッド

4

2 に答える 2

38

再定義されたため、2 番目の 1 つだけが実行されます。MSDN (プロジェクト ファイルの章でのターゲットの宣言)を参照してください。

次のように、プロジェクト ファイルで AfterBuild ターゲットを 1 つだけ使用する必要があります。

<Target Name="AfterBuild" >
    <Message Condition="'$(MvcBuildViews)'=='true'" Importance="high" Text="--- AfterBuild for MvcBuildViews ---" />
    <Message Condition="'$(Configuration)'=='FinalBuilder'" Importance="high" Text="--- AfterBuild for FinalBuilder ---" />
</Target> 

編集: または、CallTargetタスクを使用します。

<Target Name="AfterBuild" >
    <CallTarget Condition="'$(MvcBuildViews)'=='true'" Targets="MvcBuildTarget" />
    <CallTarget Condition="'$(Configuration)'=='FinalBuilder'" Targets="FinalBuilderTarget" />
</Target> 

<Target Name="MvcBuildTarget">
    <Message Importance="high" Text="--- AfterBuild for MvcBuildViews ---" />
</Target> 

<Target Name="FinalBuilderTarget" >
    <Message Importance="high" Text="--- AfterBuild for FinalBuilder ---" />
</Target> 
于 2012-01-03T09:34:21.743 に答える