2017-01-16 2 views
1

Я хочу запустить фоновое задание, которое будет использовать много того же кода, что и основной проект, поэтому я создал новый проект для моей фоновой задачи и новый общий проект для моего общего кода.VS2015 Ошибка сборки C# UWP, общая задача проекта и фона

Я передал весь свой общий код проекту совместного кода, я добавил ссылку на мой общий проект в свой основной проект, и проект работает.

Затем я добавил ссылку на мой общий проект в проект моей фоновой задачи, построил решение и работает (работает как в компиляторах).

Как только я добавить ссылку на мой фоне проект задач в мой основной проект, когда я пытаюсь построить решение я получаю следующее сообщение об ошибке:

Публичный типа имеет пространство имен («BackgroundTask»), что не имеет общего префикса с другими пространствами имен ('SharedCode.Functions'). Все типы в файле метаданных Windows должны существовать в подпространстве имен пространства имен, которое подразумевается именем файла. BackgroundTask C: \ Users \ User \ documents \ visual studio 2015 \ Projects \ Project \ BackgroundTask \ WINMDEXP

Если я не добавляю ссылку на фоновый проект в основном проекте, и я пытаюсь запустить фоновое задание, оно не работает ,

В моем проекте основной задачи, вверху, я включил использование SharedCode; И когда задача выполняется, ему просто нужно сделать один вызов общего кода:

wait SharedCode.Check();

Проект фоновой задачи, не обязательно использовать SharedCode.Functions напрямую, который будет вызываться из самого проекта SharedCode.

Любые идеи?

И только для справки, общий код будет сделать запрос HTTP и обновить локальную базу данных с помощью SQLite.net-PCL

ответ

1

Кажется, есть правило, база имен для общих проектов и время выполнения компонентов. (Я никогда не слышал об этом раньше.)

Из-за способа экспорта кода, сгенерированного из среды выполнения, он должен иметь одно корневое пространство имен. Самый простой способ добиться этого - использовать имена проектов с общим префиксом перед точкой.

Так вместо того, чтобы проекты называемые

  • MyApp
  • SharedCode
  • BackgroundTask

Вы называете их (и установить корневые пространства имен)

  • MyApp (или MyApp.Client)
  • MyApp.Shared
  • MyApp.BackgroundTask

В качестве альтернативы вы можете сделать вещи намного проще для себя, если вы могли бы вместо того, чтобы быть в состоянии использовать in-process background task (в зависимости от того, что делает ваша задача.)

0

кажется, что вы используете старый ' общий»шаблон проекта, который был использован в ОС Windows 8/Windows Phone 8.

shared app

В такого рода проектах, код фактически дублируется в различных родительских проектов это означает, что даже если вы видите три проекта здесь , будет создано только два exe/dll. Код в общем проекте будет скопирован в окна и в проект телефона Windows.

Чтобы добиться того, что вы пытаетесь сделать, вы можете просто создать регулярный class library (Universal Windows) для размещения совместно используемого кода, а Windows Runtime Component (Universal Windows) библиотеку для размещения точки фона задачи входа и Blank App (Universal Windows).

Как фоновая задача, так и ваше приложение будут ссылаться на общую библиотеку классов.

Вы также можете оставить весь свой общий код в фонотеке (WinMD) и уничтожить его из своего приложения.

Смежные вопросы