目标元素 (MSBuild)

包含一组任务,供 MSBuild 按顺序执行。

<项目><目标>

Syntax

<Target Name="Target Name"
        Inputs="Inputs"
        Outputs="Outputs"
        Returns="Returns"
        KeepDuplicateOutputs="true/false"
        BeforeTargets="Targets"
        AfterTargets="Targets"
        DependsOnTargets="DependentTarget"
        Condition="'String A' == 'String B'"
        Label="Label">
    <Task>... </Task>
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <OnError... />
</Target>

属性和元素

以下部分介绍属性、子元素和父元素。

Attributes

Attribute Description
Name 必需属性。

目标的名称。 目标名称可能包含除 以外的 $@()%*?.任何字符。
Condition 可选属性。

要评估的条件。 如果条件的计算结果 false为,则目标不会执行目标主体或属性中 DependsOnTargets 设置的任何目标。 有关条件的详细信息,请参阅 “条件”。
Inputs 可选属性。

构成此目标输入的文件。 多个文件用分号分隔。 文件的时间戳将与文件中 Outputs 的时间戳进行比较,以确定文件 Target 是否是最新的。 有关详细信息,请参阅 增量生成如何:以增量方式生成转换
Outputs 可选属性。

表单输出到此目标的文件。 多个文件用分号分隔。 文件的时间戳将与文件中 Inputs 的时间戳进行比较,以确定文件 Target 是否是最新的。 有关详细信息,请参阅 增量生成如何:以增量方式生成转换
Returns 可选属性。

将提供给调用此目标的任务(例如 MSBuild 任务)的项集。 多个目标由分号分隔。 如果文件中的目标没有 Returns 属性,则输出属性将用于此目的。
KeepDuplicateOutputs 可选的布尔属性。

如果 true记录了对目标返回中的同一项的多个引用。 默认情况下,此属性为 false.
BeforeTargets 可选属性。

以分号分隔的目标名称列表。 指定后,指示此目标应在指定目标或目标之前运行。 这使项目作者无需直接修改即可扩展现有目标集。 有关详细信息,请参阅 目标生成顺序
AfterTargets 可选属性。

以分号分隔的目标名称列表。 指定后,指示此目标应在指定目标或目标之后运行。 这使项目作者无需直接修改即可扩展现有目标集。 有关详细信息,请参阅 目标生成顺序
DependsOnTargets 可选属性。

在执行此目标之前必须执行的目标,或者可能发生顶级依赖项分析。 多个目标由分号分隔。
Label 可选属性。

可以标识或订购系统和用户元素的标识符。

子元素

元素 Description
任务 创建和执行 MSBuild 任务的实例。 目标中可能有零个或多个任务。
PropertyGroup 包含一组用户定义的 Property 元素。 元素 Target 可能包含 PropertyGroup 元素。
ItemGroup 包含一组用户定义的 Item 元素。 元素 Target 可能包含 ItemGroup 元素。 有关详细信息,请参阅 “项”。
OnError 如果 ContinueOnError 属性为 ErrorAndStop(或 false)失败的任务,则会导致执行一个或多个目标。 目标中可能有零个或多个 OnError 元素。 如果 OnError 元素存在,它们必须是元素中的 Target 最后一个元素。

有关属性的信息ContinueOnError,请参阅 Task 元素(MSBuild)。

父元素

元素 Description
项目 MSBuild 项目文件的必需根元素。

注解

在运行时指定要执行的第一个目标。 目标可以依赖于其他目标。 例如,部署目标取决于编译的目标。 MSBuild 引擎按属性中 DependsOnTargets 从左到右的顺序执行依赖项。 有关详细信息,请参阅 “目标”。

MSBuild 依赖于导入顺序,具有特定 Name 属性的目标的最后一个定义是使用的定义。

目标仅在生成过程中执行一次,即使多个目标依赖于该目标也是如此。

如果由于目标属性的计算结果而跳过Condition,则如果稍后在生成中调用目标,并且其Condition属性的true计算结果为当时,仍可以执行该false目标。

在 MSBuild 4 之前, Target 返回属性 Outputs 中指定的任何项。 为此,MSBuild 必须记录这些项目,以防生成中稍后的任务请求这些项。 由于没有办法指示哪些目标具有调用方所需的输出,因此 MSBuild 会累积所有 Outputs 调用 Target的所有项。 这会导致生成存在大量输出项的缩放问题。

如果用户在 Returns 项目中指定任何 Target 元素,则只有 Target具有 Returns 属性记录这些项的元素。

A Target 可以同时包含一个 Outputs 属性和一个 Returns 属性。 Outputs 用于 Inputs 确定目标是否 up-to-date。 Returns如果存在,则重写要确定哪些项返回给调用方的值 Outputs 。 如果 Returns 不存在, Outputs 则将提供给调用方,但前面所述的情况除外。

在 MSBuild 4 之前,每当包含Outputs对同一Target项的多个引用时,都会记录这些重复项。 在具有大量输出和许多项目相互依赖性的大型版本中,这会导致大量内存浪费,因为重复项没有任何用途。 当属性 KeepDuplicateOutputs 设置为 true时,将记录这些重复项。

Example

下面的代码示例演示执行TargetCsc任务的元素。

<Target Name="Compile" DependsOnTargets="Resources" Returns="$(TargetPath)">
    <Csc Sources="@(CSFile)"
          TargetType="library"
          Resources="@(CompiledResources)"
          EmitDebugInformation="$(includeDebugInformation)"
          References="@(Reference)"
          DebugType="$(debuggingType)" >
        <Output TaskParameter="OutputAssembly"
                  ItemName="FinalAssemblyName" />
    </Csc>
</Target>

另请参阅