MSBuild 任务

生成平台需要在生成过程中执行任意数量的作。 MSBuild 使用 任务 来执行这些作。 任务是 MSBuild 用来执行原子生成作的可执行代码单元。

任务逻辑

MSBuild XML 项目文件格式不能自行完全执行生成作,因此必须在项目文件之外实现任务逻辑。

任务的执行逻辑实现为实现 ITask 接口的 .NET 类,该接口在命名空间中 Microsoft.Build.Framework 定义。

任务类还定义可用于项目文件中任务的输入和输出参数。 任务类公开的所有公共可设置的非静态非抽象属性都可以在项目文件中给定值,方法是在 Task 元素上放置具有相同名称的相应属性,并设置其值,如本文后面的示例所示。

可以通过创作实现接口的 ITask 托管类来编写自己的任务。 有关详细信息,请参阅 任务写入

从项目文件执行任务

在执行项目文件中的任务之前,必须先将实现任务的程序集中的类型映射到 使用 UsingTask 元素的任务名称。 这让 MSBuild 知道在项目文件中找到任务时在何处查找任务的执行逻辑。

若要在 MSBuild 项目文件中执行任务,请创建一个元素,该元素的名称为元素的 Target 子级。 如果任务接受参数,这些参数将作为元素的属性传递。

MSBuild 项列表和属性可用作参数。 例如,以下代码调用MakeDir任务,并将对象的属性值Directories设置为MakeDir等于该属性的值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 以及编译 C# 源代码文件的 Csc。 有关可用任务和使用情况信息的完整列表,请参阅 任务参考

重写的任务

MSBuild 在多个位置查找任务。 第一个位置位于存储在 MSBuild 目录中的扩展名 .OverrideTasks 的文件中。 这些文件中的任务会覆盖具有相同名称的任何其他任务,包括项目文件中的任务。 第二个位置位于项目文件及其导入中。 如果未在项目中定义该任务,则会在 MSBuild 目录中的文件中定义的 MSBuild 默认任务中 .tasks 搜索该任务。