1

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

4

0 回答 0