从 Visual Studio 早期版本升级 C++ 项目

若要升级在早期版本的 Visual Studio 中创建的项目,只需在最新版本的 Visual Studio 中打开该项目。 Visual Studio 提供将项目升级到当前架构的功能。

如果选择“否”,则不会升级项目。 对于在 Visual Studio 2010 及更高版本中创建的项目,仍可在较新版本的 Visual Studio 中使用该项目。 只需设置项目属性即可继续支持旧版工具集。 如果在计算机上保留旧版 Visual Studio,它的工具集可在更高版本中使用。 例如,如果你的项目必须继续在 Windows XP 上运行,可以升级到 Visual Studio 2019。 然后在项目属性中指定工具集为 v141_xp 或更早版本。 有关详细信息,请参阅 使用 Visual Studio 中的本机多重目标生成旧项目

如果选择“是”,项目会就地升级。 无法将其转换回早期版本。 在升级场景中,这就是最好创建现有项目和解决方案文件的备份副本的原因。

注意

Visual Studio 2022 已弃用对带有 .dsw.dsp 扩展名的项目类型的升级支持。 可以使用早期版本的 Visual Studio(如 Visual Studio 2019)升级这些项目,然后在 Visual Studio 2022 中升级,以使用 Visual Studio 的最新工具和功能。

升级报表

升级项目时,你会收到升级报告。 报告也会作为 UpgradeLog.htm 保存在你的项目文件夹中。 升级报告显示转换过程中发现的问题的摘要。 其中列出了有关所做更改的一些信息,包括:

  • 项目属性。

  • 包含文件。

  • 由于编译器符合性的改进或标准的更改而无法完全编译的代码。

  • 依赖于不再可用的 Visual Studio 或 Windows 功能的代码。 或者,Visual Studio 的默认安装中没有包含,或已从产品中删除的头文件。

  • 由于 API 中的更改(如 API 重命名、函数签名更改或函数弃用)而不再编译的代码。

  • 由于诊断中的更改(如警告变为错误)而不再编译的代码

  • 由于库已更改而导致的链接器错误(尤其是使用 /NODEFAULTLIB 时)。

  • 行为更改所导致的运行时错误或意外结果。

  • 这些工具中引入的错误。 如果发现问题,请通过正常支持渠道或通过使用 Visual Studio C++ 开发者社区页面将其报告给 Visual C++ 团队。

一些升级后的项目和解决方案无需修改即可成功生成。 但是,大多数项目可能需要对项目设置和源代码进行更改。 修复这些问题没有唯一的正确方法,但建议使用分阶段方法。 在开始之前,请查看潜在升级问题概述,了解多种常见错误的详细信息。

  1. 将平台工具集、C++ 语言标准和 Windows SDK 版本(如果适用)设置为首选版本。 (“项目”>“属性”>“配置属性”>“常规”

  2. 如果存在大量错误,可以在修复这些错误时暂时禁用某些选项。 若要禁用 /permissive- 选项,请使用“项目”>“属性”>“配置属性”>“C/C++”>“语言”。 若要禁用“代码分析”选项,请使用“项目”>“属性”>“配置属性”>“代码分析”

  3. 确保所有依赖项都存在,并且包含路径或库位置正确无误。 (“项目”>“属性”>“配置属性”>“VC++ 目录”

  4. 识别并修复由于引用不再存在的 API 而导致的错误。

  5. 修复任何阻止编译的其余错误。 有关常见错误的修复,请参阅潜在升级问题概述

  6. 重新启用 /permissive-,并修复以前在 MSVC 中编译的不符合标准的代码导致的任何新错误。

  7. 启用代码分析,确定不再被视为可接受的潜在问题或已过时的编码模式。 如果代码分析标记了许多错误,你可以禁用部分警告,以便首先关注最重要的错误。 IDE 可帮助快速修复某些类型的问题。

  8. 考虑实现代码现代化的其他机会。 例如,将自定义数据结构和算法替换为 C++ 标准库或 Boost 开源库中的自定义数据结构和算法。 通过使用标准功能,可以让其他人更轻松地维护代码。 可以确信,此代码已经过标准委员会和更广泛的 C++ 社区许多专家的充分测试和审查。

对于难以修复的错误,可以搜索解决方案,或在 Microsoft Learn Q&A 上发布问题。 对于 C++ 编译器和工具中的问题,请尝试访问 C++ 开发者社区网站。

本节内容

潜在的升级问题概述
将代码升级到通用 CRT
更新 WINVER 和 _WIN32_WINNT
修复库内部的依赖项
浮点迁移问题
Visual Studio 中已弃用的 C++ 功能
VCBuild 与MSBuild
端口第三方库

另请参阅

Visual Studio 中 Visual C++ 的新增功能
Visual C++ 更改历史记录(2003 - 2015)
非标准行为
端口数据应用程序