0

我的 UWP 应用 (C++ XAML/DirectX) 正在使用 Windows 运行时组件 (C#) (*)

Windows 应用程序证书工具包“支持的 API 测试”失败并出现错误 (**),表明我应该激活 .net 本机。如果是这种情况,我如何将 WRC 编译为本机?WRC 项目没有任何涉及 .net native 的选项,我的项目是 C++ 应用程序,它也缺少任何关于 .net native 的选项。

笔记:

  • 我的应用程序有效,包括 WRC 的功能。
  • 如果没有 WRC,我的应用程序会通过 WACK。

(*) 我使用的 WRC 是https://www.nuget.org/packages/NotificationsExtensions.Win10/

(**) 我得到的错误:

  • 此应用程序类型不支持 uwphost.dll 中的 API ExecuteAssembly。UWPShim.exe 调用此 API。
  • 此应用程序类型不支持 uwphost.dll 中的 API DllGetActivationFactory。UWPShim.exe 具有转发到此 API 的导出。
  • 此应用程序类型不支持 api-ms-win-core-synch-l1-1-0.dll 中的 API OpenSemaphore。System.Threading.dll 调用此 API。
  • 此应用程序类型不支持 api-ms-win-core-kernel32-legacy-l1-1-0.dll 中的 API CreateSemaphore。System.Threading.dll 调用此 API。

编辑:我使用 Windows 10、Visual Studio 2015 Update 3 和最新的 Windows 10 SDK(版本号为 10.0.14393.33)

4

2 回答 2

1

它实际上是受支持的场景 - 您可以很好地将此类应用程序发布到 Windows 应用商店,错误只是 WACK 部分的错误,可以忽略。

于 2016-12-04T03:26:54.443 回答
0

它在 Windows 10 UWP 应用中不受支持。UWP 中的 C# 代码使用 .NET Native 编译才能通过认证(尽管它可以在没有 .NET Native 编译的情况下自由运行!)。但是 .NET Native 工具链不支持特定 Windows 运行时组件的本地编译。仅在主应用程序也是 C# 应用程序的情况下才支持。因此,当您从 C++ 代码中引用 C# WinRT 组件时,它会在组件激活期间加载 .NET 运行时(因为它没有使用 .NET Native 编译为本机代码!)并且 .NET 运行时受限于存储认证,因此 WACK 失败。

于 2016-11-30T16:45:23.077 回答