在win7 sp1上安装vs2013 update4s时解决MSB8003错误

pre

在win7 sp1上安装vs2013 update4时采用默认的平台工具集v120编译C++项目的时候遇到了MSB8003错误(Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid version number.)。这个问题卡了我一下午的时间,在采用网上推荐的解决方案的时候也无法解决,最近通过试错法解决了,基本理解了错误位置和解决的基本思路,这里记录下相关的经验。

环境

win7 x64 sp1
vs2013 ultimate update4

创建默认的C++空项目,随便写一点,然后编译,之后出现了MSB8003 无法打开kernel32lib

问题定位

MSB8003的错误信息如下

Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid version number.

也就是windowsSDKDir 这个变量找不到。这个变量可以通过如下方式检索到

右击项目->[属性]->[链接器]->[输入]->[附加依赖项]->[宏]
在检索栏中输入windowsSDKDir

在故障环境下,我们确实可以发现windowsSDKDir这个变量确实是空值,但是我们也无法手动修改这个变量。
所以我们可以确定为了解决整个问题,我们需要给这个变量附加上正确的值

问题解决过程

采用临时的解决方案

参考HewaiNZY给出的思路1 ,我们可以修改平台工具集来解决

右击项目->[属性]->[配置属性->[常规]
将[平台工具集] 修改为 visual studio 2013 - windows xp(v120_xp)

这样操作完成之后,确实可以正常的编译了,但是我们可以发现在编译的时候还是会提示 WindowsSDKDir 变量找不到,只是采用这一套工具集不依赖于WindowsSDKDir 变量。

所以这么做可以编译了,但是这样的解决方案终究感觉不靠谱,一个是在每次新建项目的时候都需要这么操作,比较麻烦,另外这个和我们正常的操作过程不一致,与vs预设的操作过程有差异,我认为两种工具集之间终究有一定的区别,所以我需要继续查找更加可靠的解决方案

安装wdk

参考cocos2dx3的解决方案2,既然系统找不到windowsSDKDir,那么我们就自己去装一个。由于微软官网上提供的是在线安装包,安装过程很长,我这里采用csdn下载上网友提供的离线安装包3

离线安装包安装起来很快,最后进度到百分之95的时候安装程序会开始修改系统配置,这边会停留一段时间。

安装完wdk8.1之后,我发现VS还是无法正常编译,编译还是会提示MSB8003

再检查一遍 windowsSDKDir变量,
我发现多了一个 windowsSDKDir_81A变量,这个变量有值,并且值中的路径正确,但是windowsSDKDir还是没有值
(在注册表如下路径中 [HKEY_LOCAL_MACHINE -> SOFTWARE->Wow6432Node -> Microsoft ->Microsoft SDKs->Windows]4 可以找到 wdk的配置路径,由于在正常的电脑下的注册表与安装好了wdk下的机器的注册表没有什么区别,我没又尝试通过修改注册表来解决该问题)

采用vs2013安装来repair

这个思路是参考cocos2dx3博客的评论中的朋友的方案5,这时候我们双击vs安装包,然后选择repair操作,repair的时间基本和重新安装的时间一样长。
repair完成之后,我们可以检索到windowsSDKDir变量,程序可以正常编译了。

方案再确认

在一个新的win7sp1的机器上配置vs2013 update4,同样报了msb8003,我采用先安装vs,在用安装包repair的方式解决,最后还是会出现msb8003错误,然后我再安装wdk,这时候还是会编译失败,我再用安装包repair,最后编译成功,IDE环境正常。

总结

不是在所有的win7 sp1上安装vs2013 都会出现msb8003,我之前有在一些win7的电脑上配置vs2013,一遍安装完成之后就没有任何问题了,当你们安装时出现msb8003错误的时候,可以参考我的解决过程来解决这个问题。

简述一下解决方案

安装wdk8.1 :保证系统中有wdk,并且注册表等环境正确,这之后VS中能找到windowsSDKDir_81A变量
使用vs安装包repair :更新windowsSDKDir的值

我觉得这个环境变量应该开放给用户自由配置,我最后为了更新windowsSDKDir这一个变量,要多花1个小时的时间去用安装包repair,槽点满满。

猜你喜欢

转载自blog.csdn.net/u010953266/article/details/80984264