2017-01-16 2 views
1

Je souhaite exécuter une tâche d'arrière-plan qui utilisera beaucoup le même code que le projet principal. J'ai donc créé un nouveau projet pour ma tâche d'arrière-plan et un nouveau projet partagé pour mon code partagé.VS2015 C# UWP Erreur de construction, projet partagé et tâche d'arrière-plan

J'ai transféré tout mon code partagé au projet de code partagé, j'ai ajouté la référence à mon projet partagé dans mon projet principal et le projet fonctionne.

J'ai ensuite ajouté une référence à mon projet partagé dans mon projet de tâche d'arrière-plan, construit la solution et cela fonctionne (fonctionne comme dans les compiles).

Dès que j'ajouter la référence à mon projet de tâche de fond dans mon projet principal, lorsque je tente de construire la solution que je reçois l'erreur suivante:

Un type public a un espace de noms (« BackgroundTask ») qui ne partage aucun préfixe commun avec d'autres espaces de noms ('SharedCode.Functions'). Tous les types d'un fichier de métadonnées Windows doivent exister dans un sous-espace de noms de l'espace de noms impliqué par le nom de fichier. BackgroundTask C: \ Utilisateurs \ Utilisateur \ documents \ studio visuel 2015 \ Projects \ Project \ BackgroundTask \ WINMDEXP

Si je n'ajoute pas la référence au projet d'arrière-plan dans le projet principal et que j'essaie d'exécuter la tâche d'arrière-plan, cela échoue .

Dans mon projet de tâche d'arrière-plan, en haut, j'ai inclus l'utilisation de SharedCode; Et lorsque la tâche s'exécute, il suffit de faire un appel au code partagé:

wait SharedCode.Check();

Le projet de tâche d'arrière-plan n'a pas besoin d'utiliser directement les fonctions SharedCode.Functions, qui seraient appelées depuis le projet SharedCode lui-même.

Des idées?

Et juste pour la référence, le code partagé fera une demande http et mettre à jour une base de données locale à l'aide SQLite.net-PCL

Répondre

1

Il semble qu'il y ait une règle d'espace de noms de base pour des projets communs et des composants d'exécution. (Je n'ai jamais entendu parler de cela auparavant.)

En raison de la façon dont le code généré par un composant d'exécution est exporté, il doit avoir un seul espace de noms racine. Le moyen le plus simple d'y parvenir consiste à utiliser des noms de projet avec un préfixe commun avant un point.

Ainsi, au lieu d'avoir des projets appelés

  • MyApp
  • SharedCode
  • BackgroundTask

Vous les appelez (et définissez les espaces de noms racine)

  • MyApp (ou MyApp.Client)
  • MyApp.Shared
  • MyApp.BackgroundTask

Comme alternative, vous pouvez faire des choses beaucoup plus simple pour vous-même si vous pourriez plutôt être en mesure d'utiliser un in-process background task (en fonction de ce que votre tâche ne.)

0

Il semble que vous utilisez un ancien ' partagée » modèle de projet qui a été utilisé sur Windows 8/Windows Phone 8.

shared app

Dans ce genre de projets, le code est en fait dupliqués dans les différents projets de parents qui signifie que même si vous voyez trois projets ici , seulement deux exe/dll seront générés. Le code du projet partagé sera copié dans les fenêtres et dans le projet Windows Phone. Pour réaliser ce que vous essayez de faire, vous pouvez simplement créer un class library (Universal Windows) standard pour héberger votre code partagé, une bibliothèque Windows Runtime Component (Universal Windows) pour héberger le point d'entrée de la tâche d'arrière-plan et une .

Votre tâche d'arrière-plan et votre application référenceront la bibliothèque de classes partagée.

Vous pouvez également laisser tout votre code partagé dans la bibliothèque de tâches d'arrière-plan (WinMD) et le consommer depuis votre application.