我需要在msbuild中调用第二个目标,但是当我在cmd中调用它时,它显示错误,我的代码在下面给出
MsBuild.csproj
<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<alen>123456</alen>
</PropertyGroup>
<Target Name="FirstTarget">
<Message Text="Hello World $(alen)" />
</Target>
<Target Name="SecondTarget">
<Message Text="The second target" />
</Target>
</Project>
第一个目标成功调用,但我无法加载第二个目标......怎么可能???
答案 0 :(得分:6)
由于您尚未定义它,因此默认目标是文件FirstTarget中的第一个目标。要从命令行调用第二个目标,您需要使用/t:SecondTarget
显式调用它。如果要同时运行,可以使用/t:FirstTarget;SecondTarget
。
您还可以将SecondTarget定义为始终位于第一个目标之后。像这样使用AfterTargets
属性:
<Target Name="SecondTarget" AfterTargets="FirstTarget">
现在msbuild msbuild.proj
会调用两个目标。
答案 1 :(得分:3)
你试过吗
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe "D:\test_2\MsBuild\MsBuild\BuildScript\MsBuild.csproj" /t:SecondTarget
答案 2 :(得分:2)
另一种选择是在构建文件中定义默认目标,而不是使用DependsOnTargets
定义目标的顺序:
<Project DefaultTargets="DefaultTarget" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<Target Name="DefaultTarget" DependsOnTargets="FirstTarget;SecondTarget">
<Message Text="Executing DefaultTarget" />
</Target>
<!-- your targets -->
</Project>
DependsOnTargets
中定义的目标将在目标本身运行之前运行。
这样做,您无需在通话中设置/t:
参数。
答案 3 :(得分:0)
我知道这是一篇非常古老的文章,但是您也可以让一个目标调用其他目标。
<Target Name="Build">
<CallTarget Targets="PreBuild"/>
<CallTarget Targets="Main"/>
<CallTarget Targets="AfterBuild"/>
</Target>