幫 vs2019 找回丟失的 SDK


幫 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".

更直觀的報錯截圖如下:
Error-MSB8037-Missing-SDK-10.0.18362.0

問題排查

既然提示找不到對應版本的 SDK,那么先到工程屬性里看一下對應的配置。在工程上,右鍵 -> 屬性 。在工程屬性對話框中選擇 Configuration Properties 下的 General 。在右側查看 Windows SDK Version 的值,確實是 10.0.18362.0,如下圖。

 

工程 SDK Version 配置
工程 SDK Version 配置

 

本地搜一下10.0.18362.0,看看本地是否存在相關的路徑。

 

everything 搜索結果
everything 搜索結果

 

本地也存在相關路徑。能想到的可以懷疑的地方都排除了。接下來請出我們的老朋友 —— process monitor

深入調查

打開 process monitor,開啟監視,在 vs 中開始編譯,問題重現后,停止監視。

下面就要進行最重要的步驟了—— 過濾。

使用 process monitor 快速解決問題的關鍵在於過濾出與問題有關的事件!

我們需要根據什么條件過濾呢?

一般操作結果是成功的事件對我們幫助不大,所以首先過濾掉 ResultSUCCESS 的事件。

既然提示的是找不到 10.0.18362.0 版本的 SDK ,相關錯誤應該和 10.0.18362.0 有關,所以只保留 Path 中包含 10.0.18362.0 的記錄。

沒想到,效果這么好,只有六條。

 

filter-result
filter-result

 

其中,有兩條是注冊表中找不到 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。看來,應該是我本地少了這個文件。因為我故意把這個文件重名了,改回來,重新編譯,搞定。

具體調查過程請參考下面的屏幕錄像。(沒法在博客園里插入視頻,請到我的個人博客上查看,https://bianchengnan.gitee.io/articles/troubleshoot-vs-error-msb8037-missing-sdk/)

后記

跟這位網友溝通的整個過程特別順暢,省心。他已經根據線索在網上搜索了相關資料,自己摸索了一番。懷疑哪里有問題,立刻能查看相關的配置進行排查。最后,在溝通的過程中,他自己就把問題解決了。原來,他在前幾天把一些文件的位置給改了,改回來就好了。后來聊天得知,他才大二,后生可畏!

總結

在幫網友解決問題的過程中,我扮演的角色其實類似 “橡皮鴨”。也希望大家遇到問題時,把問題描述給周圍的人,也許自己就知道問題出在哪了。屢試不爽!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM