MSBuild создает недопустимый файл AppxManifest. xml для фоновой задачи - PullRequest
0 голосов
/ 09 мая 2020

Наше приложение построено на WPF, но мы добавляем уведомления с помощью UWP. У нас есть проект упаковки, проект фоновой задачи UWP и пустой проект приложения UWP, который ссылается на проект фоновой задачи, в дополнение ко многим другим несвязанным проектам в решении. Проект упаковки ссылается на основной проект WPF и пустой проект UWP. Сборка работает нормально в Visual Studio, но не работает при сборке с помощью msbuild из командной строки или нашей системы сборки. Мы получаем эту ошибку:

"C:\repos\appName\BuildAll\appName.sln" (default target) (1) ->
"C:\repos\appName\BuildAll\..\appName.DesktopBridge\appName.DesktopBridge.wapproj.metaproj" (default target) (18) ->
"C:\repos\appName\appName.DesktopBridge\appName.DesktopBridge.wapproj" (default target) (19) ->
(_ValidateAppxManifest target) ->
  C:\repos\appName\appName.DesktopBridge\bin\x86\Debug\AppxManifest.xml : error APPX0501: Validation error. error 800
80204: App manifest validation error: Line 64, Column 27, Reason: The field "*[local-name()='Extensions']/*[local-name(
)='Extension']/*[local-name()='InProcessServer']/*[local-name()='ActivatableClass']" with value "Microsoft.UI.Xaml.Mark
up.ReflectionXamlMetadataProvider" must only be declared once. A duplicate exists on Line 57, Column 27. [C:\repos\appName\appName.DesktopBridge\appName.DesktopBridge.wapproj]

Это потому, что при использовании msbuild разделы расширений AppxManifest. xml выглядят так:

<Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>appName.exe</Path>
        <ActivatableClass ActivatableClassId="Microsoft.UI.Xaml.Markup.ReflectionXamlMetadataProvider" ThreadingModel="both" />
        <ActivatableClass ActivatableClassId="appName.BackgroundTasks.IncomingCallPushTask" ThreadingModel="both" />
      </InProcessServer>
    </Extension>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>CLRHost.dll</Path>
        <ActivatableClass ActivatableClassId="Microsoft.UI.Xaml.Markup.ReflectionXamlMetadataProvider" ThreadingModel="both" />
        <ActivatableClass ActivatableClassId="appName.BackgroundTasks.IncomingCallPushTask" ThreadingModel="both" />
      </InProcessServer>
    </Extension>
  </Extensions>

При сборке с помощью Visual Studio это выглядит так: это и работает нормально:

<Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="appName.BackgroundTasks.IncomingCallPushTask" Executable="appName.exe">
          <BackgroundTasks>
            <Task Type="pushNotification" />
          </BackgroundTasks>
        </Extension>
      </Extensions>

Я попытался указать расширения в Package.appxmanifest, чтобы они выглядели так, как должны отображаться в AppxManifest. xml, но мне не удалось получить msbuild для создания действительного AppxManifest файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...