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

若要升级在早期版本的 Visual Studio 中创建的项目,请在最新版本的 Visual Studio 中打开该项目。 如果仍在并行使用较旧版本的 Visual Studio,则可以选择不升级项目,直到准备好保持与这两个版本的兼容性。

在 Visual Studio 2026 中,通过设置助手增强了此体验。 安装助手提供使用 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++ 开发人员社区 页面将其报告给Microsoft 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 中Microsoft C++的新增功能
Visual C++ 更改历史记录(2003 - 2015)
非标准行为
端口数据应用程序