【问题标题】:Adding UWP Background task causes AppManifest errors添加 UWP 后台任务导致 AppManifest 错误
【发布时间】:2018-10-28 13:26:58
【问题描述】:

我一直在尝试向我的项目添加一个进程外的后台任务来更新我的应用程序的动态磁贴。该任务需要进行数据库调用以获取一些数据,然后处理该数据以发送一些磁贴通知。

我已经设法让它在我专门为后台任务功能原型创建的一个项目中工作。但是,当我尝试将后台任务添加到我的主项目时,它给了我以下错误:

Validation error. error 80080204: App manifest validation error: Line 33, Column 12, Reason: If it is not an audio background task, it is not allowed to have EntryPoint="BackgroundTasks.LiveTileTask" without ActivatableClassId in windows.activatableClass.inProcessServer. 

我搜索了这个错误,发现了一些post,它说我应该添加音频任务类型,错误会消失,但后来我得到了一个不同的错误。我什至没有尝试在后台播放音频,所以 UWP 认为我在我之外。

我的项目设置如下所示:

  • 1 UWP 项目将秋季创建者的更新作为最低/目标版本。
  • 1 个用于数据库的网络标准 2.0 项目(使用 EFcore)

我已尝试遵循 Microsoft 发布的指南,并添加一个仅用于后台任务的 WinRT 项目,但这会给我的 .net 标准 2.0 项目和 UWP 项目带来兼容性问题。我不是一个非常有经验的 UWP 开发人员,所以我想知道是否有人看到我缺少的东西。

让我的后台任务正常工作的最佳方法是什么?即使应用程序未打开,进程中的后台任务是否足以从后台更新动态磁贴?

编辑:我正在使用最新版本的 VS 2017 (15.7.1)

【问题讨论】:

标签: c# uwp background-task live-tile .net-standard-2.0


【解决方案1】:

我遇到了同样的问题并找到了解决方案。 您需要为 EntryPoint 指定完整的命名空间:

     <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="FullNameSpace.Background.ToastNotificationBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent"/>
          </BackgroundTasks>
        </Extension>
      </Extensions>
    </Application>
  </Applications>

【讨论】:

    【解决方案2】:

    在我的项目中将最低目标版本设置为 15063 为我修复了此错误。

    【讨论】:

      【解决方案3】:

      我只需要在主项目中添加对 BackgroundTask 项目的引用。

      【讨论】:

        【解决方案4】:

        我也拔掉了这个头发。我最终通过将 Target 和 Min 版本分别设置为 Fall Creators Update(内部版本 16299)和(最重要的)11 月更新(内部版本 10586)来解决它。

        旁注 1 RedStone 4 版本(版本 1803;内部版本 17133)现在在撰写我的答案时可用,但我将目标版本限制为 Fall Creators(甚至不得不将我的开发 PC 恢复到 1709;内部版本 16299 ) 由于我的项目开发存在太多问题。

        旁注 2 将 Min 版本设置得更早让我缺少功能(例如缺少 System.Diagnostics.Trace 符号)。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。不幸的是,添加音频不是解决方案,因为这将是 Windows 商店的要求,而不是一个好主意。设置最低目标版本会给您带来非常有限的 Windows 应用商店功能和更少的 UWP 功能。

          使用此链接开始并非常仔细地遵循它:

          https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

          总结一下:

          • 请确保您有一份良好的项目副本,我的清单文件在实验期间损坏了,我需要 Package.appxmanifest 备份副本。
          • 从您的项目中删除与后台任务相关的所有引用和代码。
          • 在您的解决方案中创建一个新的 Windows 通用/Windows 运行时 组件项目。
          • 将项目命名为 BackgroundTasks(作为示例)
          • 右键单击引用和管理 Nuget 包
          • 选择已安装的选项卡和 Microsoft.NETCore.UniversalWindowsPlatform
          • 将版本从 6.1.4 更改为 6.0.8(6.1.4 似乎是预览版,每次加载 VS 时都会添加额外的不需要的引用)。
          • 将 Class1.cs 名称更改为 MyBackgroundTask.cs
          • 选择 BackgroundTasks 项目 Target / Min version to Fall Creators Update
          • 右键单击您的解决方案/项目依赖项。选择BackgroundTasks并检查构建顺序是否正确,我的设置是BackgroundTasks在主项目之前构建。
          • 请参阅UWP Samples 的示例代码以创建示例后台任务。
          • 如以上链接所述更改 Package.appxmanifest 文件。
          • 构建解决方案,您就应该开展业务了。

          我个人建议使用进程外后台任务,以消除后台任务崩溃不影响应用程序运行的任何可能,也更加灵活。

          作为提示,您的 BackgroundTaskBuilder 将引用为字符串:

           builder.Name = "MyBackgroundTask";
           builder.TaskEntryPoint = "BackgroundTasks.MyBackgroundTask";
          

          我发现在 UWP 中制作后台任务相当乏味,但一旦做得好就值得付出努力。

          【讨论】:

            【解决方案6】:

            感谢您提供 MSDN-Link,因为我偶然发现了完全相同的问题。

            按照链接中的所有描述帮助我启动了我的应用程序。 我按照以下步骤操作:

            • 手动将 Type:audio 添加到我的 appxmanifest 中
            • 将 BackgroundTask 项目更改为 Windows 运行时类库
            • 将最低目标版本设置为 15063

            特别是最后一步似乎是强制性的,希望这不会与您的需求相冲突。

            【讨论】:

              猜你喜欢
              • 2016-11-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-03-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多