Visual Studio 2022:无法打开包含文件:'ctype.h'

Visual Studio 2022: Cannot open include file: 'ctype.h'

我在 C++ 构建中收到臭名昭著的错误消息:“无法打开包含文件:'ctype.h'”。我知道类似的问题已经被问过多次,但我的情况似乎有所不同,因为我使用的是最新的 Visual Studio 2022,并且表现似乎有所不同。

我有一堆现有的 C++ 项目,它们使用普通 32 位 Windows API 和 DirectX 6,我使用 VC++ 构建工具 2015 和 Windows SDK 8.1 在 Visual Studio 的早期版本中编译它没有任何问题。 Visual Studio 2019 一切都很好,不需要特殊设置,直到我卸载它并安装 Visual Studio 2022。

现在我可以打开我的解决方案,它很好地显示它们正在使用我与 VS2022 一起安装的 C++ 构建工具 2015,并且解决方案也正确显示它们使用 Windows 8.1 SDK。但是WindowsVS2022安装时没有8.1 SDK,我单独安装的。我还尝试“修复”VS2022 安装,但这只删除了我所有的 UI 首选项,但没有修复构建中的任何内容。另外,我尝试重新安装Windows 8.1 SDK,但它说已经可以了。

查看Visual Studio时,我看不到任何可以设置默认include 和lib 目录的地方,我只能列出现在正在使用的目录。 VS2022 显示此列表:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include
C:\Program Files\Windows Kits\Include.0.10240.0\ucrt
C:\Program Files (x86)\Windows Kits.1\Include\um
C:\Program Files (x86)\Windows Kits.1\Include\shared
C:\Program Files (x86)\Windows Kits.1\Include\winrt

我收到的实际错误信息是这样的:

c:\program files (x86)\windows kits.1\include\um\winnt.h(31): fatal error C1083: Cannot open include file: 'ctype.h': No such file or directory

所以它说 windows 套件 8.1 中的 winnt.h 找不到 ctype.h。是的,那个文件夹或周围的任何地方都没有 ctype.h,我只能在 C:\Program Files\Microsoft Visual Studio22\Professional\SDK\ScopeCppSDK\vc15\SDK\include\ucrt 中看到它 我认为这是带有 VC++ 2015 构建工具的文件夹。所以这似乎是正确的,但我想知道为什么在项目设置中设置了 VC++ 2015 构建工具时,这个文件夹不是默认包含目录的一部分。因为 VS2022 似乎正确选择了我的 Windows 8.1 SDK,但没有正确选择旧的 C++ 编译器。

当我尝试将 ctype.h 所在的文件夹添加到包含文件夹时,我收到另一种类型的错误,指出其他文件与这些包含文件不兼容。当然,这个目录系统需要同步。那么请问正确的使用方法是什么?

此外,我尝试将 VC++ 构建工具切换到 2022 版本。不幸的是,这也不能解决问题。并且Windows 10 SDK没有安装,软件想兼容旧的Windows,所以我不需要它。

我发现了一个相关的错误报告:https://developercommunity.visualstudio.com/t/windows-81-sdk-1/151682

虽然 Microsoft 员工拒绝接受它作为一个错误,但它也发生在我身上。当我只安装 Windows 8.1 SDK 时,无法编译任何项目。我什至尝试在 VS2022 中创建一个新的 Windows API 项目,该项目已创建,但提交编译时出现相同的错误。

所以我尝试安装 Windows 10 SDK(从 VS2022 安装,但这可能并不重要),这添加了一些缺失的文件,现在有助于编译 Windows 8.1 SDK 项目。问题似乎已解决,我的旧 C++ 现在可以使用 Windows 8.1 SDK 和 C++ 构建工具 2015 和 2022 进行编译。