MSBuild

Microsoft Build Engine (MSBuild) 是一个用于生成应用程序的平台。 MSBuild 为项目文件提供 XML 架构,用于控制生成平台处理和生成软件的方式。 尽管 MSBuild 已集成到 Visual Studio 中,但不依赖于它。开发人员可以在未安装 Visual Studio 的环境中编写和生成产品。

本主题概述了 MSBuild:

  • MSBuild 项目文件的基本要素。

  • 如何使用 MSBuild 生成项目。

  • MSBuild 的高级功能。

  • Visual Studio 如何使用 MSBuild 生成项目。

  • 有关介绍性教程,请参见演练:使用 MSBuild

项目文件

MSBuild 使用基于 XML 的项目文件格式,该格式直接明了,并且可扩展。 MSBuild 项目文件格式允许开发人员描述要生成的项,以及如何针对不同的操作系统和配置生成这些项。 另外,这种项目文件格式还允许开发人员创作可重用的生成规则,这些规则可以分解到不同的文件中,以便可以在产品内的不同项目之间一致地执行生成。

以下各节介绍了 MSBuild 项目文件格式的一些基本元素。有关如何创建基本项目文件的教程,请参见演练:从头开始创建 MSBuild 项目文件

属性

属性表示可用于配置生成的键/值对。 属性的声明方式是:创建一个与属性同名的元素,将其指定为 PropertyGroup 元素的子元素。 例如,下面的代码将创建一个名为 BuildDir 的属性,其值为 Build。

<PropertyGroup>

<BuildDir>Build</BuildDir>

</PropertyGroup>

在整个项目文件中,可以使用语法 $(PropertyName) 来引用属性。 例如,可以使用 $(BuildDir) 引用示例中的属性。 有关属性的更多信息,请参见 MSBuild 属性

项是生成系统的输入,通常表示文件。 将根据用户定义的项名称,将项编组到各种项类型中。 这些项类型可以用作任务的参数,任务使用各个项来执行生成过程的步骤。

通过创建一个元素在项目文件中声明项,该元素的项类型的名称是 ItemGroup 元素的子元素。 例如,下面的代码将创建一个名为 Compile 的项类型,其中包括两个文件。

<ItemGroup>

<Compile Include = "file1.cs"/>

<Compile Include = "file2.cs"/>

</ItemGroup>

在整个项目文件中,可以使用语法 @(ItemType) 来引用项类型。 例如,可以使用 @(Compile) 引用示例中的项类型。

可以使用通配符声明项,并且对于更高级的生成方案,项可以包含其他元数据。 有关项的更多信息,请参见 MSBuild 项

任务

任务是 MSBuild 项目用于执行生成操作的可执行代码单元。 例如,任务可能编译输入文件或运行外部工具。 任务可以重用,并且可由不同项目中的不同开发人员共享。

任务的执行逻辑在托管代码中编写,并使用 UsingTask 元素映射到 MSBuild。 您可以通过创作一个实现 ITask 接口的托管类型来编写自己的任务。 有关如何编写任务的更多信息,请参见任务写入

MSBuild 附带了许多可进行修改以适合需求的常规任务,例如,用于复制文件的 Copy、用于创建目录的 MakeDir,以及用于编译 Visual C# 源代码文件的 Csc。 有关可用任务的列表以及用法信息,请参见 MSBuild 任务参考

通过创建一个元素在 MSBuild 项目文件中执行任务,该元素的任务的名称是 Target 元素的子元素。 任务通常接受参数,参数将作为元素的特性进行传递。 MSBuild 的属性和项都可用作参数。 例如,以下代码将调用 MakeDir 任务,并将前面示例中声明的 BuildDir 属性的值传递到该任务。

<Target Name="MakeBuildDirectory">

<MakeDir Directories="$(BuildDir)" />

</Target>

有关任务的更多信息,请参见 MSBuild 任务

目标

目标按特定的顺序将任务组合到一起,并将项目文件的各个部分公开为生成过程的入口点。 目标通常编组到逻辑部分以提高可读性并允许扩展。 通过将生成步骤拆分为目标,您可以从其他目标中调用生成过程的一个部分,而不必将那部分代码复制到每个目标中。 例如,如果生成过程的多个入口点需要引用才能生成,您可以创建一个生成引用的目标,然后从每个必需的入口点运行此目标。

目标是使用 Target 元素在项目文件中声明的。 例如,以下代码将创建一个名为 Compile 的目标,该目标随后将调用具有前面示例中声明的项列表的 Csc 任务。

<Target Name="Compile">

<Csc Sources="@(Compile)" />

</Target>

在更高级的方案中,目标可用于描述彼此之间的关系并执行依赖性分析,这样,如果目标是最新的,则可以跳过生成过程的整个部分。 有关目标的更多信息,请参见 MSBuild 目标

条件元素

许多 MSBuild 元素都是有条件地定义的,也就是说,元素中会出现 Condition 特性。 除非条件的计算结果为“true”,否则会忽略条件元素的内容。 例如,

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

意指“如果尚未定义 Configuration 属性,则定义该属性并为其指定值 Debug”。

几乎所有 MSBuild 元素都可以有 Condition 特性。 有关更多信息,请参见 MSBuild 条件

区分大小写

MSBuild XML 架构遵循 XML 的规则。 元素和特性名称区分大小写。 不过,属性、项和元数据名称在 MSBuild 对象模型中不区分大小写。 请看下面的项组。

<ItemGroup>

<Compile Include="one.cs" />

<comPile Include="two.cs" />

</ItemGroup>

这将创建项类型 Compile、comPile 或任何其他大小写变体,并为其指定值“one.cs;two.cs”。

在命令提示符处使用 MSBuild

要在命令提示符处运行 MSBuild,请将项目文件随相应的命令行选项一起传递到 MSBuild.exe。 命令行选项允许您设置属性、执行特定的目标,以及设置可控制生成过程的其他选项。 例如,使用以下命令行语法生成文件 MyProj.proj,并将 Configuration 属性设置为 Debug。

MSBuild.exe MyProj.proj /property:Configuration=Debug

有关 MSBuild 命令行选项的更多信息,请参见 MSBuild 命令行参考。 

安全说明安全说明

在下载项目之前,请确定代码的可信度。

高级概念

MSBuild 还可用于执行其他操作,例如,将错误、警告和消息记录到控制台或其他输出设备、对目标执行依赖性分析,以及以批处理方式完成有关项元数据的任务和目标。 有关这些高级概念的更多信息,请参见 MSBuild 高级概念

在 Visual Studio 中使用 MSBuild

Visual Studio 使用 MSBuild 项目文件格式来存储有关托管项目的生成信息。 通过使用 Visual Studio 界面添加或更改的项目设置将会反映到为每个项目生成的 .*proj 文件中。 Visual Studio 使用一个已承载的 MSBuild 实例来生成托管项目。 这意味着可以在 Visual Studio 中或在命令提示符处生成托管项目(即使未安装 Visual Studio),最后将得到相同的结果。

有关如何在 Visual Studio 中使用 MSBuild 的教程,请参见演练:使用 MSBuild

多目标

通过 Visual Studio,您可以将应用程序编译为在若干 .NET Framework 版本的任意一个上运行。 例如,可以将同一个应用程序编译为既能在 .NET Framework 2.0 版上运行,也能在 .NET Framework 4 版上运行。 这种使用多个框架作为编译目标的能力称为“多目标功能”。

以下是多目标功能的一些优点:

  • 可以开发以多个 .NET Framework 早期版本(例如,版本 2.0、3.0 和 3.5)为目标的应用程序。

  • 可以以 .NET Framework 之外的框架为目标,例如,Silverlight Framework。

  • 可以以一个框架配置文件为目标,该文件是目标框架的预定义子集。

  • 如果发布了 .NET Framework 版本 4 的任何 Service Pack,则可以以它们为目标。

  • 多目标功能保证应用程序仅使用目标框架中提供的功能。

  • 有关更多信息,请参见MSBuild 多目标功能

相关主题

标题

说明

演练:从头开始创建 MSBuild 项目文件

演示如何只使用文本编辑器以增量方式创建基本项目文件。

演练:使用 MSBuild

介绍 MSBuild 的生成块,并演示如何在不关闭 Visual Studio 集成开发环境 (IDE) 的情况下编写、操作和调试 MSBuild 项目。

MSBuild 概念

演示 MSBuild 的四个生成块:属性、项、目标和任务。

MSBuild 项

介绍 MSBuild 文件格式背后的常规概念,以及所有这些概念之间的关系。

MSBuild 属性

介绍属性和属性集合。 属性是可用于配置生成的键/值对。

MSBuild 目标

介绍如何按特定的顺序将任务组合到一起,并允许从命令行调用生成过程的各个部分。

MSBuild 任务

演示如何创建 MSBuild 可用于执行原子生成操作的可执行代码单元。

MSBuild 条件

论述如何在 MSBuild 元素中使用 Condition 特性。

MSBuild 高级概念

演示批处理、执行转换、监视(记录)生成以及其他高级技术。

其他 MSBuild 资源

列出社区和支持资源,用于了解有关 MSBuild 的更多信息。

参考