繁体   English   中英

什么是Windows套件以及它们如何工作?

[英]What are Windows Kits and how do they work?

在Visual Studio中在Windows上开发C ++项目的过去,您的Visual Studio版本将拥有自己的C和C ++库版本,您的项目将引用特定版本的Windows SDK以访问标头以进行访问到Win32平台。 如果安装了多个版本的Windows SDK,则会出现一个涉及环境变量的复杂系统,使您可以选择默认情况下Windows SDK Visual Studio将使用的版本。

这不是很好,让它正常工作需要一些挖掘,但它只是工作。

刚刚从VS2012升级到VS2015,在我看来,无论这个系统被替换了什么都是彻头彻尾的破坏,或者我只是不理解它。

  1. 将包含conio.h的简单VS2012 C ++控制台应用程序升级到VS2015,并且没有报告错误。 为什么? conio.h不再位于Visual Studio C / C ++库中,而是现在位于Windows Kit 10中,升级项目不会重置所使用的SDK(如您所料)。

  2. 在VS2015中创建一个全新的Hello World C ++应用程序C ++项目包括目录继承$(VC_IncludePath)和$(WindowsSDK_IncludePath)。 $(WindowsSDK_IncludePath)从C:\\ Program Files(x86)\\ Windows Kits \\ 8.1中提取标题,而$(VC_IncludePath)从C:\\ Program Files(x86)\\ Windows Kits \\ 10中提取标题。

如此简单的项目升级失败,升级时未报告错误。 清理新的控制台项目同时从2个不同的Windows Kit安装中提取标题,现在我在C:\\ Program Files(x86)\\ Microsoft SDKs和C:\\ Program Files(x86)\\ Windows Kits下有8.1和10的条目。 Windows Kit 8.1包含Win32和WinRt标头,而Windows Kit 10包含C / C ++标头。

我是否有错误配置和损坏的安装或者它应该如何混乱?

如果这个混乱是应该如何,这是如何工作的? 我已经尝试在MSDN上搜索有关Windows套件的信息,但除了关于Windows驱动程序工具包的东西之外什么都没有,这曾经是完全不同的东西,但我不知道它是否仍然存在。

是否有任何我遗漏的文档解释了这个库配置背后的基本原理以及它是如何使用的?

我现在几次碰到了这个问题的几个不同版本,问题解决了从VS2012升级到VS2015的项目的头文件和库依赖项。

Hans回答我的问题的评论确实解决了标题的问题,但在遇到库依赖的相同问题之后,我有了一个更简单的解决方案,也适用于失败的库依赖解析。

在VS2015中打开VS2012项目时,不会执行自动升级。 打开项目属性并将常规 - >平台工具集更改为Visual Studio 2015(v140)可能会重现原始问题中描述的标题解析错误的变体或不同的库依赖项解析错误。

我发现解决这些问题的最简单方法是打开项目属性并转到VC ++目录 - >包含目录。 在您自己添加到项目中的任何路径中,您可能会找到$(VCInstallDir)\\ include; $(VCInstallDir \\ atlmfc \\ include; $(WindowsSDK_IncludePath)

单击路径以显示下拉列表并单击编辑,这将显示一个对话框,其中包含三个部分,从上到下,显式定义的路径,已评估的路径和继承的路径。 在最底部是一个复选框“继承自父项或项目默认值”,我总是发现它最初是未选中的。

从显式定义的包含路径中删除上面描述的$(VCInstallDir)\\ include; $(VCInstallDir \\ atlmfc \\ include; $(WindowsSDK_IncludePath)条目,并选择“从父​​项或项目默认值继承”设置。这应解决任何头文件依赖项的问题。

如果您还有库引用问题,请对库目录条目执行相同操作,编辑设置,删除显式平台条目并选择“从父​​项或项目默认值继承”。 (即使您没有看到任何链接器错误,这可能是一个好主意,否则您最终可能会在链接到VS2012的库时使用VS2015的平台工具集编译器选项)。

我不知道为什么当我没有碰到其他有类似问题的人时,这对我来说是搞砸了,我之前没有遇到升级Visual Studio解决方案的问题。

我还没有发现为什么某些版本的Windows Kits现在包含Windows平台头文件或C ++库头文件,而以前SDK始终包含平台头文件,而C ++头文件始终是部分或Visual Studio安装。 看起来像这样的变化应该有关于它的开发博客或其他一些文档。 但只要它有效,那我就不在乎了。

我希望这有助于某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM