Подтвердить что ты не робот

Сборка, добавленная через ссылку "Добавить ссылку", не скопирована в выходной каталог, если не указано в коде

Ситуация:

  • Проект 1 представляет собой сборку в решении
  • Проект 2 - это проект исполняемой сборки в том же решении
  • Проект 2 содержит ссылку на проект (через ссылку "Добавить ссылку" ) в проект 1
  • Проект 2 напрямую не ссылается на пространства имен/типы в Project 1 в коде
  • В проекте 2 используется Ninject для динамической загрузки Project 1 и использования в нем классов реализации

Проблема:

  • Несмотря на то, что для ссылки ссылка "Копировать локаль" установлена ​​на "Истина", а ссылочная сборка не существует в GAC, ссылка на сборку не копируется в каталог сборки вывода
  • Ninject впоследствии не находит сборку, и поэтому сбой/разрешение не выполняется

Этот процесс отлично подходит для идентичной установки, где некоторые классы в ссылочной сборке ссылаются напрямую, а также загружаются Ninject, поэтому я считаю, что причина такова: если VS обнаруживает, что никакие типы в ссылочной сборке не указаны в коде, он не будет копировать ссылочную сборку, даже если она добавлена ​​в качестве ссылки с Copy Local = True.

Решение (ы):

  • Найдите способ передачи VS, "Копировать локальный (я действительно это имею в виду)" = True - это было бы моим идеальным решением.
  • Добавьте ссылку на файл для ссылки. Не очень хорошо, так как я теряю преимущества ссылки на проект (что может быть или не быть полностью в моей голове).
  • Обратите внимание на сборку в некотором "токене" в коде. Messy - я хотел бы использовать список ссылок для поддержки списка сборок/модулей, которые я хочу включить.
  • Послестроить шаги для копирования сборки. Несчастный, не идеальный.

Может ли кто-нибудь помочь с первым решением или предложить другое?

4b9b3361

Ответ 1

Aha.. ссылочная сборка предназначена для .NET Framework 4.0, но сборка ссылок ориентирована на версию профиля клиента .NET 4.0.

Ссылка была добавлена, появилась, никаких проблем или предупреждений вообще (из UI или VS, по крайней мере), но я не мог ссылаться на нее в коде, и она не появлялась на выходе.

Если у кого есть идеи, почему это не обнаружено, возможно, они могут сообщить мне?

Ответ 2

Если вы развертываете/копируете приложение, содержащее ссылку на пользовательский компонент, зарегистрированный в GAC, компонент не будет развернут/скопирован с приложением независимо от параметра "Копировать локальную". См. MSDN

Вам нужно принудительно скопировать локальный текст в true, добавив метаданные Частные в ссылку сборки GAC. Измените файл проекта и добавьте метаданные Частные:

<Reference ..>
    <Private>True</Private>
</Reference ..>

<ProjectReference ..>
    <Private>True</Private>
</ProjectReference ..>

Теперь ваша сборка GAC должна быть скопирована/удалена из выходной папки.