包含一组任务,供 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>