Сбой WACK, когда решение UWP включает компонент среды выполнения Windows (C #)

Мое UWP-приложение (C ++ XAML / DirectX) использует компонент среды выполнения Windows (C #) (*)

Наборы сертификатов приложений Windows «Поддерживаемый API-тест» завершается с ошибкой (**), указывающей на то, что я должен активировать .net native. Если это так, как я могу скомпилировать WRC на нативный? У проекта WRC нет опций, связанных с .net native, и мой проект — приложение C ++, в котором также нет опций, касающихся .net native.

Замечания:

  • Мое приложение работает, включая функциональность WRC.
  • Без WRC мое приложение проходит WACK.

(*) WRC, который я использую, https://www.nuget.org/packages/NotificationsExtensions.Win10/

(**) Ошибка, которую я получил:

  • API ExecuteAssembly в uwphost.dll не поддерживается для этого типа приложения. UWPShim.exe вызывает этот API.
  • API DllGetActivationFactory в uwphost.dll не поддерживается для этого типа приложения. UWPShim.exe имеет экспорт, который пересылает в этот API.
  • API OpenSemaphore в api-ms-win-core-synch-l1-1-0.dll не поддерживается для этого типа приложения. System.Threading.dll вызывает этот API.
  • API CreateSemaphore в api-ms-win-core-kernel32-legacy-l1-1-0.dll не поддерживается для этого типа приложения. System.Threading.dll вызывает этот API.

Изменить: Я использую Windows 10, Visual Studio 2015 Update 3 с последней версией Windows 10 SDK (номер версии 10.0.14393.33)

0

Решение

Это фактически поддерживаемый сценарий — вы можете просто опубликовать такие приложения в Магазине Windows, а ошибка — это просто ошибка в части WACK, и ее можно игнорировать.

1

Другие решения

Это неподдерживаемый сценарий в приложениях Windows 10 UWP.
Код C # в UWP должен быть скомпилированным с .NET Native для прохождения сертификации (хотя он может свободно работать без .NET Native!). Но .NET Native toolchain не поддерживает встроенную компиляцию отдельных компонентов среды выполнения Windows. Он поддерживается только для сценария, когда основное приложение также является приложением C #.
Таким образом, когда вы ссылаетесь на компонент C # WinRT из кода C ++, он загружает .NET Runtime во время активации компонента (так как он не компилируется в нативный код с .NET Native!), А .NET Runtime ограничивается для сертификации магазина и поэтому WACK терпит неудачу.

0

По вопросам рекламы [email protected]