Target 元素 (MSBuild)

包含 MSBuild 的一组任务,这组任务应按顺序执行。

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

特性和元素

以下几节描述了属性、子元素和父元素。

特性

特性

说明

Name

必选特性。

目标的名称。

DependsOnTargets

可选特性。

在可以执行此目标或者进行顶级依赖项分析之前必须执行的目标。 多个目标之间用分号分隔。

Returns

可选特性。

将可用于调用此目标的任务(例如,MSBuild 任务)的项目集。 多个目标之间用分号分隔。

Inputs

可选特性。

此目标的项输入。 此特性中的项用作顶级依赖项分析中的输入。

Outputs

可选特性。

此目标的预期输出。 可以通过对输入项应用转换来生成输出项。 有关转换的更多信息,请参见MSBuild 转换

BeforeTargets

可选特性。

以分号分隔的目标名称的列表。如果指定,则指示此目标应在指定的一个或多个目标之前运行。这允许项目作者无需直接修改现有的一组目标即可扩展它们。

AfterTargets

可选特性。

分号分隔的目标名称列表。 如果指定,则指示此目标应在指定的一个或多个目标之后运行。这允许项目作者无需直接修改现有的一组目标即可扩展它们。

KeepDuplicateOutputs

可选的布尔特性。

如果为 true,则记录输出中对同一项的多个引用。 默认情况下,此特性为 false。

Condition

可选特性。

要计算的条件。 如果条件的计算结果为 false,目标将不会执行该目标的体或者在 DependsOnTargets 特性中设置的任何目标的体。 有关条件的更多信息,请参见 MSBuild 条件

子元素

元素

说明

任务

创建并执行 MSBuild 任务的一个实例。 一个目标中可以有零个或零个以上的任务。

OnError

如果失败的任务的 ContinueOnError 特性为 false,那么此元素会导致一个或多个目标执行。 一个目标中可以有零个或零个以上的 OnError 元素。 如果 OnError 元素存在,则它们必须是 Target 元素中的最后元素。

父元素

元素

说明

Project

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

备注

要执行的第一个目标在运行时指定。 目标可能依赖于其他目标。 例如,要部署的目标依赖于要编译的目标。 MSBuild 引擎按照依赖项在 DependsOnTargets 特性中的显示顺序,从左至右依次执行这些依赖项。 有关更多信息,请参见 MSBuild 目标

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

如果由于某个目标的 Condition 特性的计算结果为 false 而跳过了该目标,但是在生成过程的后期调用该目标,并且它的 Condition 特性在当时的计算结果为 true,那么仍然可以执行该目标。

在 MSBuild 4 之前,Target 返回的是在 Outputs 特性中指定的任何项。 为此,MSBuild 必须在稍后的用例任务中,将这些项记录在请求它们的生成中。 因为没有办法指示哪些目标有调用方需要的输出,所以 MSBuild 积累了调用的所有 Target 上的所有 Outputs 中的所有项目。 这对于拥有大量输出项的生成,会导致缩放问题。

如果用户在项目的任何 Target 元素上指定 Returns,则只有拥有 Returns 特性的 Target 才记录这些项目。

Target 可以包含 Outputs 特性和 Returns 特性。 OutputsInputs 一起使用,确定目标是否最新。 如果存在,Returns 将重写 Outputs 的值,以确定将哪些项返回给调用方。 如果 Returns 不存在,则 Outputs 将可用于调用方,前面所述的情况除外。

MSBuild 4 之前,任何时间 Target 都在其 Outputs 中包括了对同一项的多个引用,这些重复的项目都会被记录。 在有大量输出和许多项目相互依赖项的非常大的生成中,这会导致大量的内存浪费,因为重复的项目没有任何用途。 当 KeepDuplicateOutputs 特性设置为 true 时,不会存储这些重复项。

示例

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

<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>

请参见

概念

MSBuild 目标

MSBuild 项目文件架构引用