VCBuild 与 MSBuild:Visual Studio 2010 中的生成系统更改

Visual Studio 2010 中引入了适用于 C++ 项目的 MSBuild 系统。 在 Visual Studio 2008 和早期版本中,使用的是 VCBuild 系统。 依赖 VCBuild 的某些文件类型和概念在 MSBuild 中不存在或表示方式不同。 本文档讨论了当前生成系统的差异。 若要将 Visual Studio 2008 项目转换为 MSBuild,必须使用 Visual Studio 2010。 转换项目后,应使用最新版本的 Visual Studio 升级到当前的 IDE 和编译器工具集。 有关详细信息(包括如何获取 Visual Studio 2010),请参阅 有关 Visual Studio 2008 的说明

以下部分汇总了从 VCBuild 到 MSBuild 的更改。 如果 VCBuild 项目具有 MSBuild 无法识别的自定义生成规则或宏,请参阅 Visual Studio Projects - C++,了解如何将这些说明转换为 MSBuild 系统的内容。 从 VCBuild 到 MSBuild 的初步转换只是一个中间步骤。 无需完全正确地获取项目文件,也不需要让程序在没有错误的情况下进行编译。 仅使用 Visual Studio 2010 将项目转换为 MSBuild 格式,就能让项目在最新版本的 Visual Studio 中正常运作。

.vcproj 现在是 .vcxproj

项目文件不再使用 .vcproj 文件扩展名。 Visual Studio 2010 会自动将早期版本的 Visual C++ 创建的项目文件转换为 MSBuild 格式,该格式采用项目文件的 .vcxproj 扩展名。

.vsprops 现在是 .props

在 Visual Studio 2008 及更早版本中,项目属性表是基于 XML 的文件,其文件扩展名为 .vsprops。 项目属性表可以为生成工具(如编译器或链接器)指定开关和创建用户定义的宏。 在 MSBuild 中,项目属性表的文件扩展名为 .props。

自定义生成规则和 .rules 文件

在 Visual Studio 2008 及更早版本中,规则文件是基于 XML 的文件,其文件扩展名为 .rules。 借助规则文件,可定义自定义生成规则并将其合并到 Visual Studio C++ 项目的生成过程中。 可以与一个或多个文件扩展名关联的自定义生成规则可以将输入文件传递到创建一个或多个输出文件的工具。

在 MSBuild 系统中,自定义生成规则由三种文件类型(.xml、.props 和 .targets)表示,而不是由 .rules 文件表示。 使用早期版本的 Visual C++ 创建的 .rules 文件迁移到 Visual Studio 2010 时,系统会创建等效的 .xml、.props和 .targets 文件,并将其与原始 .rules 文件一起存储在项目中。

重要

在 Visual Studio 2010 中,IDE 不支持创建新规则。 因此,若要使用通过早期版本的 Visual C++ 创建的项目中的规则文件,最简单的方法是将该项目迁移到 Visual Studio 2010。

继承宏

在 Visual Studio 2008 及更早版本中,$(Inherit) 宏指定了继承属性在由项目生成系统组成的命令行中的显示顺序。 $(NoInherit) 导致任何出现的 $(Inherit) 都被忽略,并导致任何本来可以继承的属性不被继承。 例如,默认情况下,$(Inherit) 宏导致通过使用 /I (Additional Include Directories) 编译器选项指定的文件被追加到命令行。

在 Visual Studio 2010 中,通过将属性的值指定为一个或多个文本值和属性宏的串联来支持继承。 $(Inherit) 和 $(NoInherit) 宏不受支持

在以下示例中,以分号分隔的列表被分配盗属性页上的属性。 该列表包含 <value> 文本和 MyProperty 属性值的串联,可通过使用宏表示法 $() 访问

Property=<value>;$(MyProperty)

.vcxproj.user 文件

用户文件 (.vcxproj.user) 存储特定于用户的属性,例如调试和部署设置。 vcxproj.user 文件适用于特定用户的所有项目。

.vcxproj.filters 文件

当解决方案资源管理器用于将文件添加到项目时,筛选器文件 (.vcxproj.filters) 定义在解决方案资源管理器树状视图中添加文件(基于其文件扩展名)的位置

VC++ 目录设置

Visual C++ 目录设置在“VC++ 目录”属性页上指定。 在 Visual Studio 2008 及更早版本中,目录设置适用于每个用户,并且在 sysincl.dat 文件中指定了已排除的目录列表。

如果在命令行上运行 devenv /resetsettings,则无法更改 VC++ 目录设置。 如果打开“工具”菜单,单击“导入和导出设置”,然后选择“重置所有设置”选项,同样无法更改设置

从由早期版本的 Visual Studio 创建的 .vssettings 文件迁移 VC++ 目录设置

  1. 打开“工具”菜单,单击“导入和导出设置”
  2. 选择“导入所选环境设置
  3. 按照向导中的说明进行操作。

另请参阅

命令行上的 MSBuild - C++