使用 Visual Studio 中的本机多目标来生成旧项目

通常,建议在安装最新版本的 Visual Studio 时更新项目。 更新项目和代码所要花费的成本通常被新 IDE、编译器、库和工具所带来的好处所大大抵消了。 但是,我们知道你可能无法更新某些项目。 你可能拥有与那些因维护原因而无法升级的旧库或平台绑定在一起的二进制文件。 你的代码可能使用非标准的语言构造,如果移动到更新的编译器,构造会发生中断。 代码可能依赖于为特定版本的 Microsoft C++ (MSVC) 编译的第三方库。 或者,您可以为必须面向特定旧版 MSVC 的其他人创建库。

幸运的是,可以使用 Visual Studio 生成面向较旧生成工具和库的项目。 如果仍然安装了原始工具,则无需从 Visual Studio 2010 起升级项目即可利用 IDE 中的新功能:

  • 新的C++重构功能和编辑器功能
  • 新的诊断工具调试器窗口和错误列表窗口
  • 改进的断点、异常窗口和新的 PerfTips
  • 新的代码导航和搜索工具
  • 新的C++快速修复方案

还可以面向 Visual Studio 2008 项目,但不能一成不变地使用这些项目。 有关详细信息,请参阅“Visual Studio 2008 简介”部分

最新版本的 Visual Studio 支持项目的本机多目标和往返。 最新的 IDE 具备本机多目标编译的能力,能够使用以前版本的 Visual Studio 安装的构建工具进行生成。 往返是一种功能,即最新的 IDE 可加载由 IDE 旧版本创建的项目,而无需对项目进行任何更改。 如果并行安装最新版本和现有版本的 Visual Studio,则可以配合使用新版本的 IDE 与现有版本的编译器和工具,来生成项目。 团队的其他成员可以继续在旧版本的 Visual Studio 中使用项目。

使用较旧的生成工具版本时,可以利用许多最新的 IDE 功能,但不能利用C++编译器、库和生成工具的最新进展。 例如,你无法使用新的语言一致性改进、新的调试和代码分析功能,或者更快地获取最新生成工具的生成吞吐量。 还有一些 IDE 功能与较旧的生成工具不兼容。 例如,内存探查器中可能缺少类型信息,重构作 转换为原始字符串文本 会生成C++11 一致性代码,这些代码在使用 Visual Studio 2012 或较旧的生成工具时不会编译。

如何在 Visual Studio 2026 中使用原生多目标

Visual Studio 2026 包括新的 设置助手。 可以加载现有解决方案,在 解决方案资源管理器 中选择 “重定目标”解决方案 以打开助手。 可以使用助手安装与正在加载的项目兼容的缺少的C++生成工具(MSVC 组件和 Windows SDK),包括最初随旧版 Visual Studio 一起提供的工具。 这样,就可以继续使用现有项目,而不会失去与以前的 Visual Studio 版本的兼容性。 稍后,准备好完全升级时,可以使用助手将这些项目重定向到最新版本的 IDE。

如何在 Visual Studio 2010-2022 中使用原生多目标支持

并行安装 Visual Studio 和较旧版本后,在 Visual Studio 的新版本中打开现有项目。 加载项目时,Visual Studio 会询问是否要对其进行升级以使用最新的 C++ 编译器和库。 由于希望项目保留旧版编译器和库,因此选择“取消”按钮。

Visual Studio 会持续提示升级项目。 为避免在每次加载项目时看到升级对话框,可以在你的项目中或在项目导入的 .props.targets 文件中定义以下属性:

<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>

如果想升级项目,必须删除此属性。

如果选择不升级,Visual Studio 不会对解决方案或项目文件进行更改。 生成项目时,生成的二进制文件与使用旧版本的 Visual Studio 生成的二进制文件完全兼容,因为 Visual Studio 使用相同的 C++ 编译器并链接旧 IDE 附带的相同库。 这也是为什么如果选择“取消”,升级对话框会警告你保留安装的较旧的 Visual Studio 版本

有关 Visual Studio 2008 的说明

Visual Studio 2008 具有自己的专用 C++ 生成系统 VCBuild。 在 Visual Studio 2010 中,Visual Studio C++ 项目改为使用 MSBuild。 无论是永久升级还是使用多目标,都必须通过更新步骤在最新版本的 Visual Studio 中生成 Visual Studio 2008 项目。 更新的项目仍然会生成与使用 Visual Studio 2008 IDE 创建的二进制文件完全兼容的二进制文件。

首先,除了当前版本的 Visual Studio 之外,还必须将 Visual Studio 2010 安装在安装 Visual Studio 2008 的计算机上。 只有 Visual Studio 2010 会安装面向 Visual Studio 2008 项目时所需的 MSBuild 脚本

接下来,必须将 Visual Studio 2008 解决方案和项目更新到当前版本的 Visual Studio。 建议在升级之前创建项目和解决方案文件的备份。 若要开始升级过程,请在当前版本的 Visual Studio 中打开解决方案。 获取升级提示时,请查看显示的信息,然后选择“确定”以开始升级。 如果解决方案有多个项目,则必须更新每个项目。 向导会与现有的 .vcxproj 文件并排创建新的 .vcproj 项目文件。 只要你也有原始 .sln 文件的副本,升级对你现有的 Visual Studio 2008 项目则不会造成其他影响。

注意

以下步骤仅适用于多目标场景。 如果打算将项目永久升级到更高版本的生成工具版本,则下一步是保存项目,在最新版本的 Visual Studio 中打开该项目,并解决其中出现的生成问题。

升级完成后,如果日志报告中有关于任何项目的错误或警告,请仔细查看。 从 VCBuild 转换到 MSBuild 时可能导致问题。 请确保已了解并执行报告中列出的所有操作项。 若要详细了解升级日志报告以及将 VCBuild 转换为 MSBuild 时可能出现的问题,请参阅这篇 C++ 本机多目标博客文章

升级完成后,并修复了日志文件中的任何问题,您的解决方案现在将针对最新的构建工具。 最后一步是更改解决方案中每个项目的属性,以使用 Visual Studio 2008 生成工具。 在当前版本的 Visual Studio 中加载解决方案后,针对解决方案中每个项目,打开项目的“属性页”对话框:右键单击“解决方案资源管理器”中的项目,然后选择“属性”。 在“属性页”对话框中,将“配置”下拉值更改为“所有配置”。 在“配置属性”下,选择“常规”,然后将“平台工具集”更改为 Visual Studio 2008 (v90)

进行此更改后,在当前版本的 Visual Studio 中构建解决方案时,使用 Visual Studio 2008 编译器和库生成项目二进制文件。

安装较旧的 Visual Studio 生成工具

你可能会有无法或不打算升级的旧版 Visual Studio C++ 项目。 若要生成它,需要与项目匹配的生成工具版本。 若要获取生成工具,可以安装所需的免费 Visual Studio Community 或 Express 版本。 从 Visual Studio 2008 开始的每个版本的 Visual Studio 都可以安装编译器、库和其他生成工具,以便从当前的 Visual Studio 面向该版本。 搜索 Microsoft 下载中心以查找和下载 Visual Studio 的特定版本。 请确保在安装过程中选择 C++ 安装选项。 安装完成后,运行该版本的 Visual Studio 以安装任何更新。 同时查找可能需要的任何 Windows 更新更改。 此更新检查过程可能需要重复多次以获取每个更新。

有关当前可用的下载,请参阅下载较旧的 Visual Studio 软件

安装这些产品后,“属性页”对话框中的 MSVC 生成工具版本属性下拉列表会自动更新以显示可用的生成工具版本。 在某些情况下, 平台工具集 属性也可能有新的选择。 现在可以使用最新版本的 Visual Studio 来生成使用旧版生成工具的项目:无需转换或升级。

另请参阅

从早期版本的 Microsoft C++ 升级项目
Visual Studio 中的 C++ 符合性改进