Kon*_*rad 21 msbuild msbuild-task visual-studio-2010 visual-studio-project
我在Visual Studio项目中定义了几个具有不同条件的AfterBuild - Tasks:
<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>
Run Code Online (Sandbox Code Playgroud)
但是如果条件匹配,则只执行最后一个.如果我选择FinalBuilder-Configuration,则忽略AfterBuild任务而不执行.如果我更改项目文件中的Targets的顺序(Condition ="'$(Configuration)'=''FinalBuilder'"作为最后一个),则执行AfterBuild for FinalBuilder-Configuration但忽略MvcBuildViews的.
目标的顺序是否重要?是否只考虑了最后的AfterBuild任务?或者如何使用不同的条件定义不同的AfterBuild任务?
谢谢
康拉德
Lud*_*dwo 35
唯一的第二个被执行,因为它被重新定义.请参阅MSDN(在项目文件章节中声明目标).
您应该在项目文件中只使用一个AfterBuild目标,如下所示:
<Target Name="AfterBuild" >
<Message Condition="'$(MvcBuildViews)'=='true'" Importance="high" Text="--- AfterBuild for MvcBuildViews ---" />
<Message Condition="'$(Configuration)'=='FinalBuilder'" Importance="high" Text="--- AfterBuild for FinalBuilder ---" />
</Target>
Run Code Online (Sandbox Code Playgroud)
编辑:或使用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>
Run Code Online (Sandbox Code Playgroud)
如果您确实需要运行多个 AfterBuild 任务(例如,如果您需要为每个任务设置不同的输入和输出集,则可能就是这种情况),您可以使用 DependsOnTarget 来简单地使 AfterBuild 依赖于所有这些任务:
<Target Name="AfterBuild1"
Inputs="stuff"
Outputs="stuff">
<Message Text="Running first after build task." Importance="high" />
<Exec Command="stuff" />
</Target>
<Target Name="AfterBuild2"
Inputs="other stuff"
Outputs="other stuff">
<Message Text="Running other after build task." Importance="high" />
<Exec Command="stuff" />
</Target>
<Target Name="AfterBuild" DependsOnTargets="AfterBuild1;AfterBuild2" />
Run Code Online (Sandbox Code Playgroud)
如果您需要限制它们的顺序,只需使用DependsOnTargets="AfterBuild1".
| 归档时间: |
|
| 查看次数: |
5723 次 |
| 最近记录: |