MSBuild

Microsoft Build Engine 是一个用于生成应用程序的平台。此引擎,也称为 MSBuild,为控件的项目文件提供一个 XML 架构生成平台生成软件的方式。Visual Studio 使用 MSBuild,但是,它不依赖于 Visual Studio。通过调用在您的项目或解决方案文件的 msbuild.exe,您在未安装 Visual Studio 环境中编写和生成产品。

Visual Studio 使用 MSBuild 加载和生成托管项目。在 Visual Studio (.csproj、.vbproj,vcxproj 和其他) 的项目文件包含 MSBuild 使用 IDE,执行的 XML 代码何时生成项目。Visual Studio 项目导入任何必需的设置,并生成过程完成典型的开发工作,使用 XML 编辑器,但是,您可以扩展或修改它们从 Visual Studio 内或。

下面的示例演示何时可能运行生成使用 MSBuild 命令行而不是 Visual Studio IDE。

  • 没有安装 Visual Studio。

  • 要使用 MSBuild 的 64 位版本。MSBuild 的此版本通常不是必需的,但是,它提供 MSBuild 访问更多内存。

  • 要运行在多个的生成过程。但是,可以使用 IDE 从 Visual Studio 启动实现在项目的相同结果在 C++ 中,此外,2012 中,C#。

  • 要修改的生成系统。例如,您可能希望启用以下活动:

    • 在到达编译器之前,请预处理文件。

    • 将生成输出复制到一个不同位置。

    • 创建从生成输出的压缩文件。

    • 执行后续处理步骤。例如,您可能希望标记具有不同的版本的程序集。

使用 MSBuild,可以在 Visual Studio IDE 中编写代码,但运行生成。另外,还在开发计算机上的 IDE 中生成代码,但使用 MSBuild 命令行生成从多个开发人员集成的代码。

说明说明

可以使用 Team Foundation build 编译,自动测试和部署应用程序。您的生成系统可根据计划自动运行生成,当开发人员签入代码时 (例如,作为一个持续集成方案的一部分) 或 (例如,夜间生成验证测试编译)。使用 MSBuild,Team Foundation build 编译代码。有关更多信息,请参见生成应用程序

本主题概述了 MSBuild。有关介绍性教程,请参见演练:使用 MSBuild

主题内容

  • 在命令提示符处使用 MSBuild

  • 项目文件

    • 属性

    • 任务

    • 目标

  • 生成日志

  • 在 Visual Studio 中使用 MSBuild

  • 多目标

在命令提示符处使用 MSBuild

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

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

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

安全说明安全说明

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

项目文件

MSBuild 使用非常简单且可扩展的基于 XML 的项目文件格式。MSBuild 项目文件格式允许开发人员描述要生成的项,以及如何针对不同的操作系统和配置生成这些项。此外,项目文件格式允许开发人员创作可以析因到不同的文件的可重用的生成规则,以便生成可以在不同的项目之间一致地执行在该产品。

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

Dd393574.collapse_all(zh-cn,VS.110).gif属性

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

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

可以通过将 Condition 属性有条件地定义元素中的特性。除非条件的计算结果为 true,否则会忽略条件元素的内容。在下面的示例中,则为;如果未定义,Configuration 元素中定义。

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

在整个项目文件中,可以使用语法 $(PropertyName) 来引用属性。例如,通过使用 $(BuildDir) 和 $(Configuration),可以引用上例中的属性。

有关属性的更多信息,请参见 MSBuild 属性

Dd393574.collapse_all(zh-cn,VS.110).gif

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

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

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

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

在 MSBuild,元素和特性名称区分大小写。但是,属性、项和元数据名称不是。下面的示例将创建项类型 Compile、comPile,或其他大小写变体,并为项类型值“one.cs; two.cs”。

<ItemGroup>
  <Compile Include="one.cs" />
  <comPile Include="two.cs" />
</ItemGroup>

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

Dd393574.collapse_all(zh-cn,VS.110).gif任务

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

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

MSBuild 包括您可以修改以适合需求的常规任务。示例是 复制,复制文件、MakeDir,创建一个目录和 Csc,生成 Visual C# 源代码文件。有关可用任务的列表以及用法信息,请参见 MSBuild 任务参考

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

<Target Name="MakeBuildDirectory">
    <MakeDir  Directories="$(BuildDir)" />
</Target>

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

Dd393574.collapse_all(zh-cn,VS.110).gif目标

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

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

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

在更高级的方案中,目标可用于描述在彼此之间的关系,并执行依赖性分析,使生成的所有过程可以跳过,如果目标是最新的。有关目标的更多信息,请参见 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 版本的任意一个上运行。例如,在 32 位平台的 .NET Framework 2.0 中编译应用程序运行,因此,您在一个 64 位平台的 .NET framework 4.5 中生成同一应用程序运行。这种使用多个框架作为编译目标的能力称为“多目标功能”。

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

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

  • 除了 .NET framework,例如,Silverlight 外,可以针对结构。

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

  • 如果发布了 .NET framework 的当前版本的 Service Pack,您可以将它。

  • 多目标功能保证应用程序使用可在目标框架和平台中可用的功能。

有关更多信息,请参见MSBuild 多定向概述

相关主题

标题

描述

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

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

演练:使用 MSBuild

介绍 MSBuild 并显示编写,如何为,操作和调试 MSBuild 项目,而无需关闭 Visual Studio IDE。

MSBuild 概念

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

MSBuild 项

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

MSBuild 属性

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

MSBuild 目标

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

MSBuild 任务

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

MSBuild 条件

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

MSBuild 高级概念

批处理存在,执行转换,多目标功能和其他高级技术。

MSBuild 中的日志记录

介绍如何记录生成事件、消息和错误。

其他 MSBuild 资源

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

引用