我们的应用是在 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 文件。