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 的生成块,并演示如何在不关闭 Visual Studio 集成开发环境 (IDE) 的情况下编写、操作和调试 MSBuild 项目。 |
|
演示 MSBuild 的四个生成块:属性、项、目标和任务。 |
|
介绍 MSBuild 文件格式背后的常规概念,以及所有这些概念之间的关系。 |
|
介绍属性和属性集合。 属性是可用于配置生成的键/值对。 |
|
介绍如何按特定的顺序将任务组合到一起,并允许从命令行调用生成过程的各个部分。 |
|
演示如何创建 MSBuild 可用于执行原子生成操作的可执行代码单元。 |
|
论述如何在 MSBuild 元素中使用 Condition 特性。 |
|
演示批处理、执行转换、监视(记录)生成以及其他高级技术。 |
|
列出社区和支持资源,用于了解有关 MSBuild 的更多信息。 |
参考
MSBuild 参考
链接到包含参考信息的主题。MSBuild 词汇表
定义常见 MSBuild 术语。