diskspd的github地址:https://github.com/microsoft/diskspd
在使用VS2017编译diskspd时,报了一些错误。
一、编译其中任意工程报错
报错如下:
- error MSB8036: 找不到 Windows SDK 版本8.1。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。
原因:
原来工程可能是调用的其他版本sdk,但是目前系统上没有该版本。
解决办法:安装Windows 8.1 SDK
安装Windows SDK 版本8.1,步骤如下:
打开Visual Studio Installer
选择"修改"
勾选"Windows 8.1 SDK和UCRT SDK",并执行修改。
安装完成后,重新启动。选中解决方案,右键选择"重定解决方案目标"
选择8.1版本sdk
再次编译此错误消失。
二、编译其中XmlProfileParser工程报错
报错如下:
- 错误: 未能找到 CodeDom 提供程序类型“Microsoft.VisualC.CppCodeProvider, CppCodeProvider, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。
- D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1954,5): error MSB6006: “xsd.exe”已退出,代码为 1。
原因:
通过对比发现是编译xsd文件报错,其他文件不报错。
经过对xsd文件的了解,发现利用xsd.exe可以将XSD文件生成C#类,但是似乎xsd.exe无法实现生成C++类,故报错中指出“xsd.exe”已退出。
我使用命令方式将XSD文件生成C++类,也是报与VS中一样的错误,如下:
反正这错误就是XSD转换生成失败。
解决办法:删除XSD文件
我发现该工程下有个.h与.xsd文件名一样,猜测diskspd.h就是diskspd.xsd生成的c++类。打开diskspd.h查看,发现并不是C++,而是C#,比较疑惑???。
假设头文件diskspd.h,真是xsd生成的,那反正现在已经有了,不需要再编译时再生成一次。
那就删除diskspd.xsd试试,再编译,居然完美通过。
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。