Добавить ссылку на компонент среды выполнения Windows в существующий проект

У меня есть решение Windows Phone 8.1 со следующими проектами:

  • MainApplication (для самого приложения)
  • Переносимая библиотека классов (PCL) (для некоторых полезных методов и прочего)
  • Компонент среды выполнения Windows (WinRT) (для фоновых задач)

Я пытаюсь скомпилировать PCL и WinRT в пакет .nuget и знаю, что могу сделать это с помощью PCL однако в WinRT я что-то упускаю.
Чтобы проверить это вручную, я удаляю проекты из решения и добавляю их сборки в качестве эталонных, т. е. < strong>PCL создает файл .dll, который я добавляю в свое MainApplication в качестве ссылки. Проблема в том, что WinRT создает не файл .dll, а файл .winmd. Дело в том, что я не знаю, как добавить этот файл в мой PCL в качестве ссылки.

Подводя итог, как я могу добавить в качестве ссылки результат сборки проекта WinRT? Это файл .winmd или какой-то другой?


person Schrödinger's Box    schedule 04.11.2014    source источник
comment
Ваш вопрос очень трудно читать.   -  person Hans Passant    schedule 04.11.2014
comment
Вы не можете добавить ссылку WinRT в свой PCL. В этом суть PCL. WinRT — это подмножество .NET для конкретной платформы. PCL — это подмножество, не зависящее от платформы. PCL, по сути, является подмножеством WinRT. Это означает, что попытка сообщить библиотеке PCL о WinRT DLL означает, что будет куча ссылок, которые библиотека PCL не поймет. Если вам нужно установить связь между двумя библиотеками, вам нужно использовать внедрение зависимостей, чтобы перехватывать вызовы в PCL из WinRT. WinRT знает все, что делает PCL, поэтому ему нужно приложить усилия, чтобы PCL понял, что ему нужно.   -  person Nate Diamond    schedule 05.11.2014
comment
@NateDiamond На самом деле вы можете, я нашел способ сделать это. Если вам интересно, проверьте мой ответ.   -  person Schrödinger's Box    schedule 14.11.2014
comment
Я полагаю, вы неправильно понимаете. Вы можете добавить проект WinRT в пакет nuget, это не проблема. Однако ваше последнее предложение: Дело в том, что я не знаю, как добавить этот файл в свой PCL в качестве ссылки. это другой запрос, который вы не можете выполнить (на который ответил мой комментарий).   -  person Nate Diamond    schedule 14.11.2014
comment
Хорошо, но в моем проекте у меня есть ссылка на WinRT в моем PCL, и после того, как Nuget будет создан и у меня есть все .dll в моем проекте, и WinRT выглядит как одна, я могу добавить ее в качестве ссылки, поэтому для моего случая соединение работает. Я не понимаю, где это не так. Можете ли вы привести конкретный сценарий?   -  person Schrödinger's Box    schedule 14.11.2014


Ответы (1)


Мне удалось решить мою проблему, и все это было вопросом выяснения того, какие файлы из WinRT я должен добавить. Поэтому, когда вы создаете пакет .nuget и хотите добавить проект WinRT, как если бы это была .dll, вам понадобится файл WindowsRuntimeProject.pri и файл WindowsRuntimeProject.winmd. Когда вы устанавливаете пакет в свой проект, WinRT будет выглядеть как .dll.
Это выглядит примерно так:
введите здесь описание изображения

Дополнительную информацию о том, как собрать пакет .nuget, можно найти здесь.

person Schrödinger's Box    schedule 14.11.2014