修复被破坏的 vs 工程设置

简介: 修复被破坏的 vs 工程设置

缘起

前几天打开工作项目进行编译,没想到居然报错,明明前一天编译还正常的。简单排查后,临时修复了问题。但是今天新建工程时居然还有相同的问题,是可忍熟不可忍?本文记录了排查过程,希望对各位小伙伴儿有帮助。话不多说,上菜。

初遇错误

不方便使用实际工程截图,就用我新建的测试工程吧,提示的错误是一样的。

compile-error-c1083-missing-SDKDDKVer.png

我的第一反映是,难道 SDKDDKVer.h 被意外删掉了?赶紧使用 everything 搜一下。

search-sdk-ddk.png

本地有这个文件,而且这个文件的位置看上去没问题,但是为什么编译的时候会提示找不到这个文件呢?看看工程配置吧。

查看工程配置

在选定的工程上右键,属性 打开工程属性页,并查看 配置属性, VC++ 目录,包含目录 的值,如下图。

inspect-project-property.png

当看到 BCG 相关的字眼时,我突然想起来最近刚装了 BCG,不会是 BCG 把包含路径给弄坏了吧?在继续调查之前,先确认一下这些值指向的路路径确实没有一个路径里包含 SDKDDKVer.h

查看包含目录的值

vs 中,$() 包含的值是宏,会展开成实际的值。点击 宏(M)>>,就可以查看每个宏对应的值了。

inspect-macro-value.png

经过一番查看,确实没有一个宏对应的路径包含 SDKDDKVer.h 。看来确实是 BCG 给弄乱了!

临时解决

因为项目比较紧,从同事那拷贝了正确的包含路径,编译,通过!这个问题暂时就放下了。没想到……

再遇此错误

今天准备编写简单的测试代码,于是新建一个工程,没想到编译时有报了同样的错误。

compile-error-c1083-missing-SDKDDKVer.png

根据上次的调查结果,是 BCG 把包含路径给弄乱了。简单查看工程属性中的包含路径确认了这点。

新建工程也出了同样的问题,说明修改的是公共的位置。趁着周末有时间,正好调查调查 BCG 是怎么把自己加到包含目录里的。

追本溯源

很快脑子中浮现了两个思路:

  1. 卸载 BCG 后,重新安装,在安装的过程中使用 procmon 监视安装过程中对文件和注册表的写操作。
  2. 直接在本地文件和注册表中搜索包含路径中出现的 BCG 相关的关键字。

我采用了第二个思路。先尝试在文件中搜索,如果搜不到再到注册表中搜索。说干就干,先在工程文件中搜索bcgpro,如下图:
search-bcg-keyword-in-vcxproj.png

没搜到,在意料之中。新建工程的时候,应该会从某个公共的位置读到这个值。

正如我在之前文章中介绍的那样,.vcxproj 文件中可以通过导入 .props 文件引入一些属性。基本上每个新建的工程都会有一些默认的导入项,如下图:

imported-props-in-vcxproj.png

BCG 会不会修改的这些文件中的一个呢?请出 FileLocator,并按下图输入关键字搜索,很幸运,搜到了。

search-bcgpro-by-filelocator.png

打开 Microsoft.Cpp.Win32.user.props 查看,如下图:

modified-user-props.png

果然被 BCG 改动过了!

彻底修复

在其它机器上找一份没改动的文件替换,关闭工程后再次打开编译,一切正常!在 vs 中新建一个工程编译,也正常!至此,我们从根本上解决了问题!

总结

  • vs$() 包围的值是宏,可以展开成实际的值。
  • .props 可以指定一些属性,比如增加一些自定义的包含路径。
  • FileLocator 搜索文件内容真是好用!强烈推荐!

参考资料

《Inside the Microsoft Build Engine —— Using MSBuild and Team Foundation Build》

相关文章
|
Windows
无法识别的标志“-Ot”(在“p2”中)
无法识别的标志“-Ot”(在“p2”中)
464 0
|
C++ 索引
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
7116 0
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
|
IDE 编译器 开发工具
Dev C++下载地址和安装教程(图解版)
Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
52735 0
Dev C++下载地址和安装教程(图解版)
安装VS2015时出现“安装包丢失或损坏”
安装VS2015时出现“安装包丢失或损坏”
|
数据库 开发者 Python
"揭秘FastAPI异步编程魔法:解锁高性能Web应用的终极奥义,让你的并发处理能力飙升,秒杀同行就靠这一招!"
【8月更文挑战第31天】FastAPI是一款基于Python的现代化Web框架,内置异步编程支持,可充分利用多核CPU的并行处理能力,大幅提升Web应用的性能。本文探讨FastAPI的异步编程特性,通过示例代码展示其在处理并发请求时的优势。异步编程不仅提高了并发处理能力,还降低了资源消耗,使代码更简洁易读。无论对于初创企业还是大型企业级应用,FastAPI都是构建高性能Web服务的理想选择。
363 0
Element UI 多选表格【翻页多选】简易版(不支持翻页多选数据反显)
Element UI 多选表格【翻页多选】简易版(不支持翻页多选数据反显)
272 0
Element UI 多选表格【翻页多选】简易版(不支持翻页多选数据反显)
|
小程序 定位技术
uniapp微信小程序地图全屏显示配送范围
uniapp微信小程序地图全屏显示配送范围
272 1
|
移动开发 安全 前端开发
分享111个HTML医疗保健模板,总有一款适合您
分享111个HTML医疗保健模板,总有一款适合您
151 0
|
Linux
Linux线程同步(try锁和读写锁)
Linux线程同步(try锁和读写锁)
183 0
|
传感器 存储 监控
esp32-cam红外实时监控报警系统(巴发云和邮箱同时推送)
esp32-cam红外实时监控报警系统(巴发云和邮箱同时推送)
313 0

热门文章

最新文章