Наше приложение построено на 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 файл.