VS 2017和2019即使在全新的解决方案上也找不到WinRT头文件

问题描述

因此,我试图使用“ Windows应用程序打包项目”将Win32应用程序更新为UWP,遇到的文件系统问题是我期望的,并试图解决这些问题。为此,我需要访问WinRT库,以便处理UWP路径以获取资产和资源。

我安装了C ++ / WinRT VSIX扩展并将NuGet软件包添加到了我的解决方案中。我假设from what i read是访问头文件所需要做的全部工作。 但是,编译器显然无法找到WinRT及其名称间的文件,因为我收到消息说cannot open source file "winrt/Windows.Storage.h,而我显然无法使用Windows::Storage::StorageFolder调用我的文件系统代码正常工作。尽管我尽了最大的努力来找出我所缺少的路径,但没有任何效果,所以我尝试了另一种策略。

在同一解决方案中,我创建了一个“ DirectX 12应用程序(通用Windows)”,以为我可能走错了路,并选择是否可以将我的前端重新实现为纯UWP应用程序而无需旧版Win32。这个新项目似乎具有权利,因为using指令适用于它使用的Windows.*名称空间,并且可以编译。尽管如此,我仍无法弄清楚如何获得与所需名称空间类似的访问名称空间,因此我无法对其进行反向工程以使我的原始项目正常工作。但是,我对此是否使用相同的库表示怀疑,因为自从我安装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项目进行构建吗?

解决方法

您必须添加对安装在某处的Windows .winmd的引用

C:\ Program Files(x86)\ Windows Kits \ 10 \ UnionMetadata \ Windows.winmd

或在vs目录中的某个位置,方法是在参考窗口中浏览,然后

您可以使用“使用Windows.Storage”,其中包含必要的内容 我不确定,但是我有一个winform应用程序在其中使用了它,并且效果很好,所以也许您可以试一下

,

此问题已由https://github.com/microsoft/cppwinrt/pull/781解决 更新您的MSIX和NuGet软件包