MSBuild 任务
生成平台需要具备在生成过程中执行任意数目的操作的能力。 MSBuild 使用任务执行这些操作。 任务是 MSBuild 用来执行原子生成操作的可执行代码单元。
任务逻辑
MSBuild XML 项目文件格式无法完全独立执行生成操作,因此必须在项目文件外实现任务逻辑。
任务的执行逻辑实现为一个实现 ITask 接口的 .NET 类,该接口在 Microsoft.Build.Framework 命名空间中定义。
任务类还定义可用于项目文件中的任务的输入和输出参数。 通过在任务元素上放置一个同名的对应特性,可以在项目文件中访问任务类公开的所有可公共设置的非静态非抽象属性。
您可以通过编写实现 ITask 接口的托管类来编写自己的任务。 有关更多信息,请参见任务写入。
从项目文件执行任务
在项目文件中执行任务之前,必须首先使用 UsingTask 元素将实现任务的程序集中的类型映射到任务名称。 这样,当 MSBuild 在项目文件中找到任务后,就知道在何处查找任务的执行逻辑了。
若要在 MSBuild 项目文件中执行任务,请创建一个具有任务的名称的元素,作为 Target 元素的子级。 如果任务接受参数,它们将作为元素的特性传递。
MSBuild 项列表和属性可以用作参数。 例如,下面的代码调用 MakeDir 任务,并将 MakeDir 对象的 Directories 属性的值设置为等于上一个示例中声明的 BuildDir 属性的值。
<Target Name="MakeBuildDirectory">
<MakeDir
Directories="$(BuildDir)" />
</Target>
任务也可以向项目文件返回信息,这些信息可以存储在项或属性中,供以后使用。 例如,下面的代码调用 Copy 任务并将来自 CopiedFiles 输出属性的信息存储在 SuccessfullyCopiedFiles 项列表中。
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="@(MyDestFolder)">
<Output
TaskParameter="CopiedFiles"
ItemName="SuccessfullyCopiedFiles"/>
</Copy>
</Target>
包括的任务
MSBuild 附带了许多任务,如用于复制文件的 Copy、用于创建目录的 MakeDir 和用于编译 Visual C#源代码文件的 Csc。 有关可用任务和用法信息的完整列表,请参见 MSBuild 任务参考。
重写的任务
MSBuild 在若干个位置查找任务。 第一个位置是在 .NET Framework 目录中存储的带 .OverrideTasks 扩展名的文件中。 这些文件中的任务会重写同名的其他任何任务,包括项目文件中的任务。 第二个位置是在 .NET Framework 目录中带 .Tasks 扩展名的文件中。 如果在这两个位置均未找到任务,则使用项目文件中的任务。