2012-03-20 3 views
30

Я уверен, что многие из нас столкнулись с этой проблемой, и почему-то у меня возникают проблемы с разрешением разрешения в любом месте.Добавить пакет 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)?

ответ

63

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

Install-Package Common.Infrastructure -IgnoreDependencies 
+2

Ваш ответ будет работать, но вы действительно пропустили суть: как создать пакет без зависимостей (как Джефф, упомянутый ниже).Я уверен, что этот пакет будет широко использоваться многими разработчиками в его компании, поэтому никто из них не запомнит (или даже не знает), что этот конкретный пакет должен быть установлен с использованием «-Индеррезависимости» .key – Kamarey

-2

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

Отредактируйте ваш файл nuspec и добавьте ссылочную dll только то, что вы хотите. ссылки ссылки файл = ссылки «dllwhichyouwantToreference.dll»

+2

3 голосов и ни единого объяснения. Я не думаю, что это помогает нам. Пожалуйста, объясните, почему? –

7

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

Используя 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 и как вы его используете. После того, как у вас есть отдельные пакеты для каждой из этих сборок, вы можете выбрать, какие из них будут ссылаться в данном проекте, и ограничить его аспектами и зависимостями, которые вам действительно нужны.