如何在Msbuild中调用第二个目标

3
我需要调用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>

第一个目标已成功调用,但我无法加载第二个目标...这怎么可能?

项目中未找到目标。 - Optimus
我正在使用Visual Studio 2010命令提示符,并使用以下代码调用默认目标:c:\programfiles..\msbuild "D:\test_2\MsBuild\MsBuild\BuildScript\MsBuild.csproj"。 - Optimus
4个回答

8

由于您没有定义它,因此默认目标是文件中的第一个目标FirstTarget。要从命令行调用第二个目标,您需要使用/t:SecondTarget显式调用它。如果您想运行两个目标,则可以使用/t:FirstTarget;SecondTarget

您还可以定义SecondTarget始终在第一个目标之后运行。像这样使用AfterTargets属性:

  <Target Name="SecondTarget" AfterTargets="FirstTarget">

现在,msbuild msbuild.proj将调用两个目标。

7

我知道这是一篇非常老的文章,但您也可以让一个目标调用其他目标。

  <Target Name="Build">
    <CallTarget Targets="PreBuild"/>
    <CallTarget Targets="Main"/>
    <CallTarget Targets="AfterBuild"/>
  </Target>

3
您尝试过吗?
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe "D:\test_2\MsBuild\MsBuild\BuildScript\MsBuild.csproj" /t:SecondTarget

?


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:参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接