缘起

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

初遇错误

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

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

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

查看工程配置

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

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

查看包含目录的值

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

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

临时解决

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

再遇此错误

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

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

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

追本溯源

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

  1. 卸载 BCG 后,重新安装,在安装的过程中使用 procmon 监视安装过程中对文件和注册表的写操作。

  2. 直接在本地文件和注册表中搜索包含路径中出现的 BCG 相关的关键字。

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

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

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

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

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

果然被 BCG 改动过了!

彻底修复

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

总结

  • vs$() 包围的值是宏,可以展开成实际的值。

  • .props 可以指定一些属性,比如增加一些自定义的包含路径。

  • FileLocator 搜索文件内容真是好用!强烈推荐!

参考资料

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

欢迎留言交流!

感谢你的分享,点赞和在看

修复被破坏的 vs 工程设置相关推荐

  1. 修复被破坏的 vs 工程设置(续)

    缘起 在上一篇文章--<修复被破坏的 vs 工程设置>中,我分享了修复被破坏的 vs 工程设置的实战.本以为圆满解决了问题,没想到另有玄机.所以又来分享一篇刨根问底的文章. 查看文件 打开 ...

  2. 修复被破坏了的linux文件系统分区表

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原贴:h ...

  3. 【Git】将 GitHub 工程设置为私有库 ( 登录账号 | 工程主页 | Settings | Danger Zone | Change visibility | Make private )

    文章目录 一.将 GitHub 中某个工程设置为私有库 一.将 GitHub 中某个工程设置为私有库 进入 GitHub 工程主页面 , 点击顶部的 Settings 按钮 , ( 注意这里必须登录 ...

  4. maven设置jdk版本(全局设置和工程设置)

    方法一:在maven文件夹下的settings.xml中添加(全局设置) <profile><id>jdk-1.8</id><activation>&l ...

  5. VC6.0的工程设置解读Project--Settings

    做开发差不多一年多了,突然感觉对VC的工程设置都不是很清楚,天天要和VC见面,虽然通常情况下一般都不会修改工程设置,但是还是有必要对它的一些设置项的来龙去脉有一定的了解,所以狂查资料,稍作整理,总结一 ...

  6. VC6.0的工程设置解读Project--Settings - 查志强(转载)

    blogs.com/zhazhiqiang/p/3597622.html 主题 Visual C++ 数据库 [原文: http://wenku.baidu.com/view/f10a241dff00 ...

  7. VC6.0工程设置介绍

    <script src="win.js" type="text/javascript"></script> 打开或新建一个包 含至少一个 ...

  8. Visual Studio的sln工程设置VTK、ITK项目

    Visual Studio的sln工程设置VTK.ITK项目 最近在学习使用VTK和ITK,使用Visual Studio新建Qt项目时发现项目不是使用过去使用的CMake组织,而是使用的Visual ...

  9. VS工程设置_调试报错_无法解析的外部符号LINK2019

    今天调试王纲老师的Push_Stream,Realse成功编译,工程设置从Realse切到Debug时报错,报无法解析的外部符号,以为所需的库文件没包含进. 以下报错: 仔细检查无误.观察Realse ...

最新文章

  1. OSChina 周日乱弹 —— 比996更先进的是365工作制
  2. linux远程图形操作系统,二、Linux操作系统之操作篇-Xmanager 远程访问Linux图形化界面...
  3. [platform]新旧内核的device设备注册对比
  4. RHCE 学习笔记(24) - LVM 逻辑卷
  5. NCRE四级网络工程师考题详解----LRU与LFU的区别
  6. 计算机数学基础符号,《计算机数学基础(2)—离散数学》+谓词逻辑.doc
  7. jQuery1.3.2 源码学习 -1 $ 是什么?jQuery 又是什么?
  8. 京东健康将开启首批新冠抗原自测产品线上预约
  9. Docker操作命令——查看、停止、删除容器
  10. Java---设计【员工工资管理系统】
  11. 计算机在网络通信方面的应用,分析计算机技术在通信中的应用
  12. winxp计算机如何连接win7计算机,xp连接win7共享打印机的步骤,xp连接win7共享打印机教程...
  13. python怎么把照片转成卡通_如何把照片变成手绘动漫化?
  14. win10 共享热点
  15. 如何实现罗克韦尔PLC的模拟量采集和远程上下载?
  16. fairyGUI的学习记录2
  17. 进程间通信 [3] —— 信号SIGNAL、信号量SEMAPHORE
  18. java 数字翻译成英文_AcWing 59. 把数字翻译成字符串--Java代码
  19. python删除最后一个元素_Numpy-从一维数组中删除最后一个元素的最佳方法?
  20. vijos 1221 神秘配方 题解

热门文章

  1. CS Academy Gcd Rebuild
  2. python-list:列表-元组-字符串
  3. 数据结构C#版笔记--堆栈(Stack)
  4. 在Windows Vista中使用符号链接
  5. 如何在PowerPoint中自动调整图片大小
  6. 同步您的Google Chrome书签,主题等
  7. “数据门”事件频发 如何避免人为因素导致数据泄露?
  8. DexClassLoader的使用
  9. 如何使用Instruments诊断App(Swift版):起步
  10. 官方的正则表达式组件 RegularExpressions (4) : 表达式选项