【问题标题】:What are Windows Kits and how do they work?什么是 Windows 工具包以及它们如何工作?
【发布时间】:2016-08-18 22:57:56
【问题描述】:

在过去,在 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 驱动程序工具包的信息外,一无所获,它曾经是完全不同的东西,但我不知道它是否仍然如此。

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

【问题讨论】:

  • 微软有一个非常困难和苛刻的客户。它的名字是微软。政治很无聊,不能解决任何人的问题。您只需要修复 Project > Properties > VC++ Directories > Include Directories。将其恢复为 $(VC_IncludePath);$(WindowsSDK_IncludePath) ,其计算结果为 5 个目录。这可能会破坏您的项目,请改用 C/C++ > General > Additional Include Directories 设置。
  • 很抱歉,我很难理解这其中的哪些部分是您需要解决的问题,哪些部分只是您抱怨的问题。如果您能够提供一个简单的代码示例,那可能会有所帮助。
  • 我试图了解 Windows 工具包与旧 Windows SDK 的关系,以及如何配置项目以使用它们的不同版本。这是一个 Visual Studio 项目配置问题,而不是代码问题。如果您不理解或不感兴趣,那很好,但请不要因为您不感兴趣而投票结束我的问题,因为如果确实出现了一个好的答案,那对其他人仍然非常有用。
  • 如果您希望这对其他人有所帮助,请确保您的问题是明确的(请参阅How to Ask)。正如目前所写的那样,您所追求的并不完全清楚。如何正确地将解决方案从 VS 2012 升级到 2015?如何验证您的构建系统是否设置正确?应如何使用 Windows SDK 标头?如何使用特定的 SDK 构建?是否有可用的文档?

标签: c++ windows winapi visual-studio-2012 visual-studio-2015


【解决方案1】:

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

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

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

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

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

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

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

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

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

我希望这对某人有所帮助。

【讨论】:

  • “我还没有发现为什么某些版本的 Windows 工具包现在包含 Windows 平台头文件或 C++ 库头文件,......而 C++ 头文件始终是 Visual Studio 安装的一部分。” --- 我认为在早期升级 VS 时,它会一起升级程序的 MFC 库、编译器、VS GUI 等。这对于新程序来说很好,但旧程序会因为不同的 windows 头文件、由于编译器差异导致的语言错误等而有错误的参数。我怀疑这种变化是 C++ 库和 VS GUI 的通用性解耦的一部分。
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2019-04-25
  • 2020-08-06
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多