所以我正在尝试使用“Windows 应用程序打包项目”将 Win32 应用程序更新为 UWP,但我遇到了文件系统问题,这是我预料到的并且正在努力解决。为了做到这一点,我需要访问 WinRT 库,以便处理 UWP 路径来获取我的资源和资产。
我安装了 C++/WinRT VSIX 扩展,并向我的解决方案添加了 NuGet 包。我认为根据我所读到的,这就是我需要访问头文件的全部内容。然而,编译器显然找不到 WinRT 和它的名称空间的头文件,因为我收到了“无法打开源文件 'winrt/Windows.Storage.h'”的消息,并且我无法使用我明显需要使我的文件系统代码工作的“Windows::Storage::StorageFolder”调用。尽管我尽最大努力弄清楚我缺少哪些包含路径,但什么都没用,所以我尝试了不同的策略。
在同一个解决方案中,我创建了一个“DirectX 12 App (Universal Windows)”项目,认为我可能走错了路,选择尝试将我的前端重新实现为一个直接的UWP应用程序,而不是使用旧的win32。这个新项目似乎有正确的包含内容,因为它使用的
为了回归基础,我创建了一个全新的解决方案,使用“Windows桌面应用程序(C++/WinRT)”,因为我知道它使用了我需要的运行时,并且应该是干净的(与我的长期使用的解决方案相比,有大量的项目和配置),所以我可以看到它使用的选项,以便我复制并访问我需要的工具。然而,刚刚创建的项目将无法编译,并且引用了与我的原始解决方案和项目完全相同的原因,即找不到WinRT标头。这让我感到困惑,所以我认为这是我在VS2017中全局做的其他配置。
为了隔离这个问题,我安装了VS2019并添加了扩展,认为“新环境,没有配置错误”。但是,再次创建一个全新的“Windows桌面应用程序(C++/WinRT)”项目将无法构建,并且找不到头文件。
自动生成的pch.h包含以下内容。
这个问题同时出现在旧的和新的解决方案文件中,无论是在VS2017还是VS2019中。我正式被卡住了,不知道发生了什么。
有人能否给予一些指示,告诉我缺少了什么,这样我就可以构建我的win32应用程序或者新创建的WinRT项目了吗?
我安装了 C++/WinRT VSIX 扩展,并向我的解决方案添加了 NuGet 包。我认为根据我所读到的,这就是我需要访问头文件的全部内容。然而,编译器显然找不到 WinRT 和它的名称空间的头文件,因为我收到了“无法打开源文件 'winrt/Windows.Storage.h'”的消息,并且我无法使用我明显需要使我的文件系统代码工作的“Windows::Storage::StorageFolder”调用。尽管我尽最大努力弄清楚我缺少哪些包含路径,但什么都没用,所以我尝试了不同的策略。
在同一个解决方案中,我创建了一个“DirectX 12 App (Universal Windows)”项目,认为我可能走错了路,选择尝试将我的前端重新实现为一个直接的UWP应用程序,而不是使用旧的win32。这个新项目似乎有正确的包含内容,因为它使用的
Windows.*
命名空间的using
指令可以工作,并且可以编译。尽管如此,我无法弄清楚它是如何访问类似于我需要的命名空间的,因此无法通过反向工程来使我的原始项目工作。然而,我怀疑这是否使用相同的库,因为这种项目类型在安装C++/WinRT VSIX扩展之前就已经存在,而WinRT没有被提及。为了回归基础,我创建了一个全新的解决方案,使用“Windows桌面应用程序(C++/WinRT)”,因为我知道它使用了我需要的运行时,并且应该是干净的(与我的长期使用的解决方案相比,有大量的项目和配置),所以我可以看到它使用的选项,以便我复制并访问我需要的工具。然而,刚刚创建的项目将无法编译,并且引用了与我的原始解决方案和项目完全相同的原因,即找不到WinRT标头。这让我感到困惑,所以我认为这是我在VS2017中全局做的其他配置。
为了隔离这个问题,我安装了VS2019并添加了扩展,认为“新环境,没有配置错误”。但是,再次创建一个全新的“Windows桌面应用程序(C++/WinRT)”项目将无法构建,并且找不到头文件。
自动生成的pch.h包含以下内容。
//it can't find anything starting with "winrt/"
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.System.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Hosting.h>
#include <winrt/Windows.UI.Xaml.Media.h>
//but it finds this one totally fine
#include <Windows.UI.Xaml.Hosting.DesktopWindowXamlSource.h>
这个问题同时出现在旧的和新的解决方案文件中,无论是在VS2017还是VS2019中。我正式被卡住了,不知道发生了什么。
有人能否给予一些指示,告诉我缺少了什么,这样我就可以构建我的win32应用程序或者新创建的WinRT项目了吗?
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
(10.0.19041.0是最新的SDK版本),Visual Studio也是使用这个路径。 - Simon Mourier