【问题标题】:Difference between MSBuild's Targets attribute and Target tagMSBuild 的 Targets 属性和 Target 标签的区别
【发布时间】:2013-03-11 03:26:12
【问题描述】:

我对 MSBuild 的 Targets 属性和一般 Target 标记感到困惑。

下面的代码是否编译成 msbuild myapp.sln /t:Rebuild 并且是 .NET 中的“重建”预定义目标。

 <Target Name="Build" DependsOnTargets="Clean">
     <MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>
 </Target>

编辑:

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Full" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>...</PropertyGroup>
  <ItemGroup>...</ItemGroup>
  <Target Name="Clean">
    <Message Text="Cleaning..."/>
    <RemoveDir Directories="$(BuildWebOutputDir);$(BuildRoot)" />
  </Target>

  <Target Name="Build">
    <Message Text="Building solution..."/>
    <MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild">
    </MSBuild>
  </Target>

  <Target Name="Copy">
    <Message Text="Copying..."/>
    <Exec Command="xcopy.exe  $(BuildWebOutputDir) $(DistDir) /e /f /y /i" />
  </Target>

  <Target Name="Full" DependsOnTargets="Clean;Build;Copy">
  </Target>  

 <Target>

</Project>

【问题讨论】:

    标签: visual-studio-2010 visual-studio msbuild target


    【解决方案1】:

    重建目标是为每个项目定义的预定义 msbuild 目标,在 csharp 的情况下,每个 csproj 中都有一个指向 msbuild 库的链接 - 带有 &lt;Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /&gt;.

    嵌入在文件中,这是目标重建从&lt;Target Name="Rebuild"&gt;开始的行为

    【讨论】:

    • 感谢您的回答。因此,如果在 MSBuild 文件中定义了名为 rebuild 的新目标,会发生什么情况。它是否独立于预定义的一个,因为我经常将目标名称视为构建、清理等。
    • 如果您在导入导入的目标文件之前定义了一个名为rebuild的新目标,则使用导入的版本。如果您在之后定义它,那么新的将替换导入的。你确定你的目标不在你的 csproj 之外吗?
    • 我已经包含了用于 MSBuild 的配置文件。那么,它是否执行配置文件中定义的所有目标并执行项目“重建”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多