修复被破坏的 vs 工程设置
緣起
前幾天打開工作項目進行編譯,沒想到居然報錯,明明前一天編譯還正常的。簡單排查后,臨時修復了問題。但是今天新建工程時居然還有相同的問題,是可忍熟不可忍?本文記錄了排查過程,希望對各位小伙伴兒有幫助。話不多說,上菜。
初遇錯誤
不方便使用實際工程截圖,就用我新建的測試工程吧,提示的錯誤是一樣的。
我的第一反映是,難道 SDKDDKVer.h 被意外刪掉了?趕緊使用 everything 搜一下。
本地有這個文件,而且這個文件的位置看上去沒問題,但是為什么編譯的時候會提示找不到這個文件呢?看看工程配置吧。
查看工程配置
在選定的工程上右鍵,屬性 打開工程屬性頁,并查看 配置屬性, VC++ 目錄,包含目錄 的值,如下圖。
當看到 BCG 相關的字眼時,我突然想起來最近剛裝了 BCG,不會是 BCG 把包含路徑給弄壞了吧?在繼續調查之前,先確認一下這些值指向的路路徑確實沒有一個路徑里包含 SDKDDKVer.h 。
查看包含目錄的值
在 vs 中,$() 包含的值是宏,會展開成實際的值。點擊 宏(M)>>,就可以查看每個宏對應的值了。
經過一番查看,確實沒有一個宏對應的路徑包含 SDKDDKVer.h 。看來確實是 BCG 給弄亂了!
臨時解決
因為項目比較緊,從同事那拷貝了正確的包含路徑,編譯,通過!這個問題暫時就放下了。沒想到……
再遇此錯誤
今天準備編寫簡單的測試代碼,于是新建一個工程,沒想到編譯時有報了同樣的錯誤。
根據上次的調查結果,是 BCG 把包含路徑給弄亂了。簡單查看工程屬性中的包含路徑確認了這點。
新建工程也出了同樣的問題,說明修改的是公共的位置。趁著周末有時間,正好調查調查 BCG 是怎么把自己加到包含目錄里的。
追本溯源
很快腦子中浮現了兩個思路:
卸載 BCG 后,重新安裝,在安裝的過程中使用 procmon 監視安裝過程中對文件和注冊表的寫操作。
直接在本地文件和注冊表中搜索包含路徑中出現的 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 工程设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收购最大K8s服务商,重回独立的SUSE
- 下一篇: TensorFlow.NET 在工业部署