当UWP解决方案包含Wi​​ndows运行时组件(C#)时,WACK失败

时间:2016-08-17 02:37:31

标签: c# c++ .net uwp wack

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

Windows App Cert Kits“支持的API测试”失败,错误(**)表明我应该激活.net native。如果是这样的话我怎么能把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)

2 个答案:

答案 0 :(得分:1)

实际上是支持的方案 - 您可以将此类应用程序发布到Windows应用商店,错误只是WACK部分的错误,可以忽略。

答案 1 :(得分:0)

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