歡迎您光臨本站 註冊首頁

幫VS2019 找回丟失的 SDK問題

←手機掃碼閱讀     火星人 @ 2020-05-12 , reply:0

緣起
前一段時間,有網友遇到一個奇怪的問題,說他機器上的 vs2019 編譯 C++ 工程報錯。我當時一聽就有兩個懷疑:
1.工程設定不對。
2. vs2019 沒裝好。
因為新建一個最簡單的工程,編譯也報一樣的錯誤,所以可以排除工程設定的問題了。那只有可能是 vs2019 的問題了。但是具體是哪裡的問題呢?
他按照錯誤提示搜尋到瞭如下連結:
https://developercommunity.visualstudio.com/content/problem/761788/msb8036-the-windows-sdk-version-100183620-was-not.html
據連結裡的提示,做過嘗試,沒能解決問題。後來在我們溝通的過程中,他自己解決了問題,這不就是大名鼎鼎的橡皮鴨除錯法嗎?當他的問題解決後,我特意在本地重現了整個過程,做了一些調查,整理成本文,分享給大家。
編譯受阻
我用 vs2019 新建了一個最簡單的 Hello world 工程,編譯,報錯如下:
Error MSB8037 The Windows SDK version 10.0.18362.0 for Desktop C++ x86 Apps was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution".
更直觀的報錯截圖如下:
問題排查
既然提示找不到對應版本的 SDK ,那麼先到工程屬性裡看一下對應的配置。在工程上, 右鍵 -> 屬性 。在工程屬性對話方塊中選擇 Configuration Properties 下的 General 。在右側檢視 Windows SDK Version 的值,確實是 10.0.18362.0 ,如下圖。
工程 SDK Version 配置
本地搜一下 10.0.18362.0 ,看看本地是否存在相關的路徑。
everything 搜尋結果
本地也存在相關路徑。能想到的可以懷疑的地方都排除了。接下來請出我們的老朋友 ―― process monitor 。
深入調查
開啟 process monitor ,開啟監視,在 vs 中開始編譯,問題重現後,停止監視。
下面就要進行最重要的步驟了―― 過濾。
使用 process monitor 快速解決問題的關鍵在於過濾出與問題有關的事件!
我們需要根據什麼條件過濾呢?
一般操作結果是成功的事件對我們幫助不大,所以首先過濾掉 Result 是 SUCCESS 的事件。
既然提示的是找不到 10.0.18362.0 版本的 SDK ,相關錯誤應該和 10.0.18362.0 有關,所以只保留 Path 中包含 10.0.18362.0 的記錄。
沒想到,效果這麼好,只有六條。
其中,有兩條是登錄檔中找不到 HKLMSoftwareWOW6432NodeMicrosoftMicrosoft SDKsWindowsv10.0.18362.0 (這個登錄檔項不是必須存在的,在能正常編譯的機器上也可能找不到),最後一條是找不到檔案 C:Program Files (x86)Windows Kits10Include10.0.18362.0sharedsdkddkver.h 。看來,應該是我本地少了這個檔案。因為我故意把這個檔案重名了,改回來,重新編譯,搞定。
具體調查過程請參考下面的螢幕錄影。
troubleshoot-missing-sdk-10.0.18362.0-screen-record 後記
跟這位網友溝通的整個過程特別順暢,省心。他已經根據線索在網上搜索了相關資料,自己摸索了一番。懷疑哪裡有問題,立刻能檢視相關的配置進行排查。最後,在溝通的過程中,他自己就把問題解決了。原來,他在前幾天把一些檔案的位置給改了,改回來就好了。後來聊天得知,他才大二,後生可畏!


[火星人 ] 幫VS2019 找回丟失的 SDK問題已經有248次圍觀

http://coctec.com/docs/program/show-post-234044.html