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

Добавить пакет NuGet без его зависимостей

Я уверен, что многие из нас столкнулись с этой проблемой, и почему-то у меня проблемы с разрешением в любом месте.

У меня есть общая библиотека (Common.Infrastructure.dll) для многих проектов, и я использую TeamCity, встроенную в NuGet Server, для размещения этой библиотеки. Эта библиотека внутренне полагается на пакеты NuGet, такие как Fluent Nhibernate, Log4net, StructureMap и т.д.).

Проще говоря, выполнение "Install-Package Common.Infrastructure" в проекте, который нуждается в этой общей зависимости, также добавляет Fluent NHibernate, log4net, SM и т.д.) в качестве "ссылок" на проект. Я не буду использовать эти зависимости Common.Infrastructure напрямую, но, очевидно, им понадобится в папке вывода (bin/debug).

Есть ли способ не иметь этих зависимостей, на которые ссылается встроенная поддержка nuget (nuspec)?

4b9b3361

Ответ 1

В команде Install-Package есть флаг для игнорирования зависимостей. Пример:

Install-Package Common.Infrastructure -IgnoreDependencies

Ответ 2

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

Используя Nuspec, вы можете явно контролировать, какие пакеты являются зависимостями и какие сборки в вашем пакете ссылаются на целевой проект. Тем не менее, я не думаю, что есть способ сделать именно то, что вы спрашиваете с помощью NuGet, потому что нет способа указать Visual Studio, что сборка должна быть скопирована в каталог bin без добавления ее в качестве ссылки на проект.

Я думаю, что ваша проблема скорее является симптомом слишком большой функциональности в одной сборке. Я рекомендую вам разделить Common.Infrastructure.dll на отдельные сборки для различных аспектов функциональности. Что-то вроде:

  • Common.Infrastructure.Logging.dll - зависит от Log4net
  • Common.Infrastructure.Database.dll - зависит от Fluent Nhibernate
  • Common.Infrastructure.IoC.dll - зависит от StructureMap
  • Какими бы ни были другие вспомогательные сборки
  • Common.Infrastructure.dll - новое меньшее ядро ​​функциональности, которое зависит только от структуры

Конечно, точный набор сборок, в котором вы его разбиваете, будет зависеть от того, какая функциональность находится в Common.Infrastructure.dll и как вы его используете. После того, как у вас есть отдельные пакеты для каждой из этих сборок, вы можете выбрать, какие из них будут ссылаться в данном проекте, и ограничить его теми аспектами и зависимостями, которые вам действительно нужны.

Ответ 3

На этом есть решение.

Отредактируйте свой файл nuspec и добавьте ссылочную dll только то, что вы хотите. Рекомендации reference file = "dllwhichyouwantToreference.dll" ссылки