Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding UWP Background task causes AppManifest errors

I've been trying to add an out of process background task to my project to update my App's live tile. The task needs to make a database call to get some data, then process that data to send out a few tile notifications.

I've managed to get it to work in one project that I created specifically for prototyping the background task functionality. However, when I tried to add a background task to my main project it gives me the following error:

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. 

I have searched for this error and found some post which said I should add the audio task type and the error would go away, but then I get a different error. I'm not even trying to play audio in the background, so it's beyond me why UWP thinks I am.

My project setup looks like this:

  • 1 UWP project targeting fall creator's update as min/target version.
  • 1 net standard 2.0 project for the database (with EFcore)

I've tried following the guidelines published by Microsoft, and add a WinRT project solely for the background task, but that gives compatibility issues all over the place with my .net standard 2.0 project and the UWP project. I'm not a very experienced UWP developer, so I'm wondering if anyone sees something that I'm missing.

What would be the best approach to getting my background task working? Is an in-process background task sufficient for updating the live tile from the background, even if the app is not opened?

EDIT: I'm using the latest version of VS 2017 (15.7.1)

like image 705
Flippey Avatar asked May 18 '18 07:05

Flippey


2 Answers

I hit the same issue. Unfortunately adding audio is not a solution as this will be a requirement for the windows store, not a good idea. Setting minimum target version gives you very limited Windows Store functionality and less UWP features.

Get started by using this link and follow it very carefully:

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

To summarise:

  • Ensure you have a good copy of your project, my manifiest file became corrupted during experimentation and I needed the Package.appxmanifest backup copy.
  • Delete all references and code relating to anything to do with background tasks from your project.
  • In your solution create a new Windows Universal / Windows Runtime Component project.
  • Name the project BackgroundTasks (as an example)
  • Right click references and Manage Nuget Packages
  • Select the installed tab and Microsoft.NETCore.UniversalWindowsPlatform
  • Change the version from 6.1.4 to 6.0.8 (6.1.4 seems to be a preview version which causes extra unwanted references to be added everytime VS is loaded).
  • Change Class1.cs name to MyBackgroundTask.cs
  • Select the BackgroundTasks project Target / Min version to Fall Creators Update
  • Right click your solution / Project Dependancies. Select BackgroundTasks and check the build order is correct, mine is set for BackgroundTasks to build before the main project.
  • Refer to the sample code at UWP Samples to create the sample background task.
  • Change the Package.appxmanifest file as described on the above link.
  • Build the solution and you should be in business.

Personally I recommend to use an out-of-process background task to eliminate any possibly that if the background task crashes it does not affect the app from running, also much more flexible.

As a tip your BackgroundTaskBuilder will reference as strings:

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

I find making background tasks in UWP quite tedious, but once done well worth the effort.

like image 199
peterincumbria Avatar answered Nov 07 '22 12:11

peterincumbria


I only had to add a reference to the BackgroundTask project in the main project.

like image 5
gabrielgeo Avatar answered Nov 07 '22 10:11

gabrielgeo