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 任务的一个实例。 一个目标中可以有零个或零个以上的任务。 |
|
如果失败的任务的 ContinueOnError 特性为 false,那么此元素会导致一个或多个目标执行。 一个目标中可以有零个或零个以上的 OnError 元素。 如果 OnError 元素存在,则它们必须是 Target 元素中的最后元素。 |
父元素
元素 |
说明 |
---|---|
MSBuild 项目文件必需的根元素。 |
备注
要执行的第一个目标在运行时指定。 目标可能依赖于其他目标。 例如,要部署的目标依赖于要编译的目标。 MSBuild 引擎按照依赖项在 DependsOnTargets 特性中的显示顺序,从左至右依次执行这些依赖项。 有关更多信息,请参见 MSBuild 目标。
一个目标在生成过程中仅执行一次,即便有多个目标依赖于它也是如此。
如果由于某个目标的 Condition 特性的计算结果为 false 而跳过了该目标,但是在生成过程的后期调用该目标,并且它的 Condition 特性在当时的计算结果为 true,那么仍然可以执行该目标。
在 MSBuild 4 之前,Target 返回的是在 Outputs 特性中指定的任何项。 为此,MSBuild 必须在稍后的用例任务中,将这些项记录在请求它们的生成中。 因为没有办法指示哪些目标有调用方需要的输出,所以 MSBuild 积累了调用的所有 Target 上的所有 Outputs 中的所有项目。 这对于拥有大量输出项的生成,会导致缩放问题。
如果用户在项目的任何 Target 元素上指定 Returns,则只有拥有 Returns 特性的 Target 才记录这些项目。
Target 可以包含 Outputs 特性和 Returns 特性。 Outputs 与 Inputs 一起使用,确定目标是否最新。 如果存在,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>