2012-03-20 16 views
30

Estoy seguro de que muchos de nosotros nos hemos encontrado con este problema y de alguna manera tengo problemas para obtener una solución en cualquier lugar.Agregue el paquete NuGet sin sus dependencias

Tengo una biblioteca compartida (Common.Infrastructure.dll) en muchos proyectos y estoy utilizando TeamCity integrado en el servidor NuGet para alojar esta biblioteca. Esta biblioteca internamente se basa en paquetes NuGet como Fluent Nhibernate, Log4net, StructureMap, etc.

En pocas palabras, hacer una "Infraestructura común de paquete de instalación" en un proyecto que necesita esta dependencia compartida también agrega Fluidez NHibernate, log4net, SM, etc. como "referencias" al proyecto. No voy a utilizar estas dependencias de Common.Infrastructure directamente, pero obviamente las necesitaría en la carpeta de salida (bin/debug) eventualmente.

¿Hay alguna manera de no hacer referencia a estas dependencias con el soporte integrado nuget (nuspec)?

Respuesta

63

El comando Install-Package tiene un indicador para ignorar las dependencias. Ejemplo:

Install-Package Common.Infrastructure -IgnoreDependencies 
+2

Su respuesta funcionará, pero realmente se perdió el punto: cómo crear un paquete sin dependencias (como Jeff menciona a continuación).Estoy seguro de que este paquete va a ser ampliamente utilizado por muchos desarrolladores en su compañía, por lo que ninguno de ellos recordará (o ni siquiera sabrá) que este paquete específico debe instalarse usando la "-IgnoreDependencies" .key – Kamarey

-2

Hay una solución para esto.

Edite su archivo nuspec y agregue solo un dll de referencia que desee. referencias referencias de archivos de referencia = "" dllwhichyouwantToreference.dll

+2

3 votos a la baja y ni una sola explicación No creo que nos ayude ¿Podrían los downvoters explicar por qué? –

7

Tenga en cuenta, la pregunta real es acerca de cómo crear un paquete que no agrega dependencias, no cómo instalar un paquete sin sus dependencias.

Utilizando Nuspec puede controlar explícitamente qué paquetes son dependencias y qué conjuntos de su paquete son referenciados por el proyecto de destino. Sin embargo, no creo que haya una manera de hacer exactamente lo que está pidiendo con NuGet porque no hay forma de indicar a Visual Studio que un ensamblado debe copiarse al directorio bin sin agregarlo como referencia de proyecto.

Creo que su problema es más bien un síntoma de agrupar demasiada funcionalidad en un solo conjunto. Te recomiendo que dividas tu Common.Infrastructure.dll en ensamblajes separados para los distintos aspectos de la funcionalidad. Algo así como:

  • Common.Infrastructure.Logging.dll - depende de Log4net
  • Common.Infrastructure.Database.dll - depende de Fluido Nhibernate
  • Common.Infrastructure.IoC.dll - depende de StructureMap
  • cualquier otro subconjuntos son apropiados
  • Common.Infrastructure.dll - un nuevo núcleo más pequeño de la funcionalidad que sólo depende de la marco

Por supuesto, el conjunto exacto de ensamblajes en el que lo descomponga dependerá de qué funcionalidad se encuentre en Common.Infrastructure.dll y cómo lo usa. Una vez que tenga paquetes separados para cada uno de estos ensamblajes, puede elegir a cuáles referencia en un proyecto determinado y limitarlo a los aspectos y dependencias que realmente necesita.

Cuestiones relacionadas