我有一个生成 DLL 的 Win32 C++ 项目。我使用 Visual Studio 2022 作为我的 IDE。 出于兼容性原因,我必须使用 MSBuild Tools v120 构建它。我无法使用较新版本的 MSBuild。 当尝试使用仅在 Windows 10 SDK (10.0.22621.0) 中可用的头文件时,出现了问题。据我从这些配置中了解到,Visual Studio 使用的是 Windows 8.1 SDK。
在我的项目配置中,当我切换到 MSBuild Tools v143 时,Visual Studio 让我选择要使用的 Windows SDK。当我这样做时,VC++ 目录配置会发生更改并以正确的 SDK 为目标。
但是,当我使用MSBuild Tools v120时没有这个选项
但我有同样的问题:Visual Studio 找不到我需要的标头。当我查看 Visual Studio WindowsSDK 相关宏时,它们仍然指向 Windows 8.1 SDK。
Visual Studio 如何选择使用 Windows 8.1 SDK?我应该如何在 Visual Studio 2022 中使用 MSBuild Tools v120 定位 Windows 10 SDK?
有一些方面我不清楚,例如:
MSBuild Tools 120兼容性限制
需要使用Win 10 SDK
由于上述 2 项的组合(并且事实上没有列出不起作用的具体内容(如 [SO]:如何创建最小的、可重现的示例 (reprex (mcve)) 中所述) -可能有其他解决方法),这可以视为 XY 问题。
到目前为止,我发现没有官方资源指出两者不兼容(但我们都知道有时MS文档并不像应有的那么清晰)。我找到了一些文章:
VStudio 14 (2105) 是第 1st 版本,确保(除其他外)VStudio 版本和 Win SDK 版本互操作性。在此之前,Win SDK版本与VStudio版本绑定(称为Platform SDK)。他们的(非官方)版本历史:
[MS.Learn]:Visual Studio 2013 平台目标和兼容性 列出 Win 8.1 作为最新目标桌面平台。
因此,如果不支持 Win 10,则没有理由使用 Win 10 特定的东西(Win 10 SDK)。
因此,无法将两者结合起来(来自 VStudio 2022)可能是 MS 告诉您不应该这样做的方式。
另一方面,我能够在 Win 10 上运行使用 VStudio 2013 构建的应用程序(不是 Hello World,而是一个包含一堆 .dll 和驱动程序的复杂应用程序)。
走得更远的方法:
切换(整个项目)到较新的 VStudio 版本。毕竟,这是推荐的、正常的方式。我知道在某些情况下(特别是涉及大型项目)这是一个重大负担,但在某些时候无论如何都必须这样做。另外(根据 [MS.DevBlogs]:旧版本 Visual Studio 的支持提醒)VStudio 2013 将在大约 6 个月内(2024/04/09)耗尽(扩展)支持。当然,它仍然有效,但一般来说,客户对在其环境中运行的代码(和相邻工具)有点偏执
使用VStudio 2013 IDE(最新更新)。您的设置很复杂(VStudio 2022、VStudio 2013 Tools、Win 10 SDK)并且没有帮助。也许如果使用更简单的,事情就不会那么复杂
不要依赖Win 10 SDK,但是无论您从那里使用什么(我必须再次指出答案中的第1st段落)都可以替换为Win 8.1 SDK(或更旧的版本)中的内容)
手动设置(包含和库)路径(仅适用于高级开发人员)。即使构建成功,请注意运行时可能会出现意外结果。 谨慎使用(因为它很可能是不受支持的配置)
不幸的是,现在我在 Nix 上(双)启动,我自己无法进行任何测试(我确实安装了超过 10 个可用的 VStudio 版本)。