幫VS2019 找回丟失的 SDK問題
緣起
前一段時間,有網友遇到一個奇怪的問題,說他機器上的 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
的記錄。
沒想到,效果這麼好,只有六條。
其中,有兩條是登錄檔中找不到 HKLM\Software\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0.18362.0
(這個登錄檔項不是必須存在的,在能正常編譯的機器上也可能找不到),最後一條是找不到檔案 C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\sdkddkver.h
。看來,應該是我本地少了這個檔案。因為我故意把這個檔案重名了,改回來,重新編譯,搞定。
具體調查過程請參考下面的螢幕錄影。
troubleshoot-missing-sdk-10.0.18362.0-screen-record 後記
跟這位網友溝通的整個過程特別順暢,省心。他已經根據線索在網上搜索了相關資料,自己摸索了一番。懷疑哪裡有問題,立刻能檢視相關的配置進行排查。最後,在溝通的過程中,他自己就把問題解決了。原來,他在前幾天把一些檔案的位置給改了,改回來就好了。後來聊天得知,他才大二,後生可畏!
總結
到此這篇關於幫VS2019 找回丟失的 SDK問題的文章就介紹到這了,更多相關vs2019 找回丟失的 SDK內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!