幫VS2019 找回丟失的 SDK問(wèn)題
緣起
前一段時(shí)間,有網(wǎng)友遇到一個(gè)奇怪的問(wèn)題,說(shuō)他機(jī)器上的 vs2019 編譯 C++ 工程報(bào)錯(cuò)。我當(dāng)時(shí)一聽(tīng)就有兩個(gè)懷疑:
1.工程設(shè)置不對(duì)。
2.vs2019 沒(méi)裝好。
因?yàn)樾陆ㄒ粋€(gè)最簡(jiǎn)單的工程,編譯也報(bào)一樣的錯(cuò)誤,所以可以排除工程設(shè)置的問(wèn)題了。那只有可能是 vs2019 的問(wèn)題了。但是具體是哪里的問(wèn)題呢?
他按照錯(cuò)誤提示搜索到了如下鏈接:
據(jù)鏈接里的提示,做過(guò)嘗試,沒(méi)能解決問(wèn)題。后來(lái)在我們溝通的過(guò)程中,他自己解決了問(wèn)題,這不就是大名鼎鼎的橡皮鴨調(diào)試法嗎?當(dāng)他的問(wèn)題解決后,我特意在本地重現(xiàn)了整個(gè)過(guò)程,做了一些調(diào)查,整理成本文,分享給大家。
編譯受阻
我用 vs2019 新建了一個(gè)最簡(jiǎn)單的 Hello world 工程,編譯,報(bào)錯(cuò)如下:
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".
更直觀的報(bào)錯(cuò)截圖如下:

問(wèn)題排查
既然提示找不到對(duì)應(yīng)版本的 SDK ,那么先到工程屬性里看一下對(duì)應(yīng)的配置。在工程上, 右鍵 -> 屬性 。在工程屬性對(duì)話框中選擇 Configuration Properties 下的 General 。在右側(cè)查看 Windows SDK Version 的值,確實(shí)是 10.0.18362.0 ,如下圖。
工程 SDK Version 配置
本地搜一下 10.0.18362.0 ,看看本地是否存在相關(guān)的路徑。
everything 搜索結(jié)果
本地也存在相關(guān)路徑。能想到的可以懷疑的地方都排除了。接下來(lái)請(qǐng)出我們的老朋友 —— process monitor 。
深入調(diào)查
打開(kāi) process monitor ,開(kāi)啟監(jiān)視,在 vs 中開(kāi)始編譯,問(wèn)題重現(xiàn)后,停止監(jiān)視。
下面就要進(jìn)行最重要的步驟了—— 過(guò)濾。
使用 process monitor 快速解決問(wèn)題的關(guān)鍵在于過(guò)濾出與問(wèn)題有關(guān)的事件!
我們需要根據(jù)什么條件過(guò)濾呢?
一般操作結(jié)果是成功的事件對(duì)我們幫助不大,所以首先過(guò)濾掉 Result 是 SUCCESS 的事件。
既然提示的是找不到 10.0.18362.0 版本的 SDK ,相關(guān)錯(cuò)誤應(yīng)該和 10.0.18362.0 有關(guān),所以只保留 Path 中包含 10.0.18362.0 的記錄。
沒(méi)想到,效果這么好,只有六條。

其中,有兩條是注冊(cè)表中找不到 HKLM\Software\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v10.0.18362.0 (這個(gè)注冊(cè)表項(xiàng)不是必須存在的,在能正常編譯的機(jī)器上也可能找不到),最后一條是找不到文件 C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\sdkddkver.h ??磥?lái),應(yīng)該是我本地少了這個(gè)文件。因?yàn)槲夜室獍堰@個(gè)文件重名了,改回來(lái),重新編譯,搞定。
具體調(diào)查過(guò)程請(qǐng)參考下面的屏幕錄像。
troubleshoot-missing-sdk-10.0.18362.0-screen-record 后記
跟這位網(wǎng)友溝通的整個(gè)過(guò)程特別順暢,省心。他已經(jīng)根據(jù)線索在網(wǎng)上搜索了相關(guān)資料,自己摸索了一番。懷疑哪里有問(wèn)題,立刻能查看相關(guān)的配置進(jìn)行排查。最后,在溝通的過(guò)程中,他自己就把問(wèn)題解決了。原來(lái),他在前幾天把一些文件的位置給改了,改回來(lái)就好了。后來(lái)聊天得知,他才大二,后生可畏!
總結(jié)
到此這篇關(guān)于幫VS2019 找回丟失的 SDK問(wèn)題的文章就介紹到這了,更多相關(guān)vs2019 找回丟失的 SDK內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言入門(mén)學(xué)習(xí)之fgets()函數(shù)和fputs()函數(shù)
fgetc() 和 fputc() 函數(shù)每次只能讀寫(xiě)一個(gè)字符,速度較慢,實(shí)際開(kāi)發(fā)中往往是每次讀寫(xiě)一個(gè)字符串或者一個(gè)數(shù)據(jù)塊,這樣能明顯提高效率,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言入門(mén)學(xué)習(xí)之fgets()函數(shù)和fputs()函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-11-11
C++簡(jiǎn)單五子棋的AI設(shè)計(jì)實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了C++簡(jiǎn)單五子棋的AI設(shè)計(jì)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中串的模式匹配
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中串的模式匹配的相關(guān)資料,需要的朋友可以參考下2017-05-05
深入分析Linux下如何對(duì)C語(yǔ)言進(jìn)行編程
本篇文章介紹了,如何在Linux下對(duì)C語(yǔ)言進(jìn)行編程的詳細(xì)概述。需要的朋友參考下2013-05-05
C語(yǔ)言修煉之路初識(shí)指針陰陽(yáng)竅?地址還歸大道真上篇
指針是指向另一個(gè)變量的變量。意思是一個(gè)指針保存的是另一個(gè)變量的內(nèi)存地址。換句話說(shuō),指針保存的并不是普通意義上的數(shù)值,而是另一個(gè)變量的地址值。一個(gè)指針保存了另一個(gè)變量的地址值,就說(shuō)這個(gè)指針“指向”了那個(gè)變量2022-02-02

