帮 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 配置

本地搜一下10.0.18362.0,看看本地是否存在相关的路径。
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

其中,有两条是注册表中找不到 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

后记

跟这位网友沟通的整个过程特别顺畅,省心。他已经根据线索在网上搜索了相关资料,自己摸索了一番。怀疑哪里有问题,立刻能查看相关的配置进行排查。最后,在沟通的过程中,他自己就把问题解决了。原来,他在前几天把一些文件的位置给改了,改回来就好了。后来聊天得知,他才大二,后生可畏!

总结

在帮网友解决问题的过程中,我扮演的角色其实类似 “橡皮鸭”。也希望大家遇到问题时,把问题描述给周围的人,也许自己就知道问题出在哪了。屡试不爽!

相关文章
|
6月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
4月前
|
存储 开发工具
通用快照方案问题之快照SDK的安装如何解决
通用快照方案问题之快照SDK的安装如何解决
42 0
|
6月前
|
存储 监控 物联网
MQTT协议问题之OTA升级包下载如何解决
MQTT协议是一个轻量级的消息传输协议,设计用于物联网(IoT)环境中设备间的通信;本合集将详细阐述MQTT协议的基本原理、特性以及各种实际应用场景,供用户学习和参考。
308 3
|
6月前
|
前端开发 开发工具 iOS开发
mPaaS常见问题之真机预览与调试扫码调式 release包开启日志如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
141 0
|
数据采集 JSON 移动开发
【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)
【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)
174 0
|
算法 Android开发 数据安全/隐私保护
如何查看android应用签名文件的信息
如何查看android应用签名文件的信息
626 0
|
开发工具 Android开发
信息提醒之Notification,兼容全部SDK-更新中
信息提醒之Notification,兼容全部SDK-更新中
84 0
|
运维 监控 Java
通过云端API完成OTA升级包上传
通过云端API完成OTA升级包上传
通过云端API完成OTA升级包上传
解决Office 365套件一直提示“缓存凭据已到期,无法上载或下载你的更改”问题
解决Office 365套件一直提示“缓存凭据已到期,无法上载或下载你的更改”问题
解决Office 365套件一直提示“缓存凭据已到期,无法上载或下载你的更改”问题
|
存储 监控 固态存储
EasyRecovery2023离线安装包下载 一键轻松找回丢失数据!
EasyRecovery35年顶级数据恢复软件一键轻松找回丢失数据!支持电脑、相机、移动硬盘、U盘、SD卡、内存卡、光盘、本地电子邮件和 RAID 磁盘阵列等各类存储设备的数据恢复。
344 0