Visual Studio 2013转2017后代码异常求助
这种跨版本编译踩的坑我可太熟了!VS2013到VS2017的跨度不小,编译器、工具链和标准支持都有不少变化,给你列几个最实用的排查方向:
1. 核对项目的平台工具集
VS2017默认用的是v141工具集,而你的项目在VS2013里用的是v120。如果项目没更新工具集,VS2017又没装v120组件,肯定会出问题:
- 右键项目 → 属性 → 配置属性 → 常规 → 平台工具集,看看是不是选了
v120 (Visual Studio 2013) - 如果是:要么打开VS2017安装程序,添加“Visual Studio 2013 (v120) 工具集”组件;要么直接切换到
v141 (Visual Studio 2017)工具集——不过改完可能要调整部分代码,因为新工具集对C++标准的检查更严格
2. 调整C++语言标准设置
VS2017对C标准的支持更全面,也更“较真”,比如默认可能启用C14,而VS2013可能还在使用老标准:
- 项目属性 → 配置属性 → C/C++ → 语言 → C++语言标准,改成和VS2013一致的选项(比如
C++11或者默认),看看错误是否消失 - 如果还是报错,大概率是代码里用了VS2013兼容但不符合C++标准的语法(比如某些微软专属扩展),这时候就得针对性修改代码——比如检查未初始化的变量、非标准的类型转换这类问题
3. 彻底清理缓存后重新生成
旧编译缓存经常是跨版本问题的“隐形凶手”:
- 手动删除项目目录下的
Debug/Release文件夹,还有隐藏的.vs文件夹(这是VS的配置缓存) - 然后在VS2017里点击菜单「生成」→「清理解决方案」,再重新生成整个项目
4. 检查第三方依赖库的兼容性
如果项目用到了Boost、OpenCV这类第三方库,一定要确认它们的版本适配VS2017:
- 用VS2013编译的库在VS2017里链接很容易出现符号错误或者兼容性问题,最好换成VS2017版本的预编译库,或者直接用VS2017重新编译第三方库的源码
5. 盯着具体错误提示精准定位
如果上面的方法都没解决,把具体的错误代码(比如C2065)和错误描述贴出来!比如有些错误只是因为VS2017启用了更高的警告等级(比如/W4),把VS2013忽略的警告当成错误了——这种情况要么调低警告等级,要么修改代码消除警告就行。
内容的提问来源于stack exchange,提问作者Adriano
相关产品推荐
相关产品推荐

