2011-10-14 14 views
65

Estoy creando mi primer paquete nuget. Agregué una dependencia con una versión que no es la última versión. Sin embargo, no quiero actualizar a la última versión de esta dependencia. ¿Es posible indicarle que use la versión específica?¿Cómo especificar una versión de dependencia específica en nuspec?

<dependencies> 
    <dependency id="NHibernate" version="3.2.0.3001" /> 
</dependencies> 

Cuando instalo el paquete que ver esto:

Attempting to resolve dependency 'NHibernate (≥ 3.2.0.3001)'. 

Esto crea lo siguiente cuando se instala el paquete.

<packages> 
    <package id="Iesi.Collections" version="3.2.0.4000" /> 
    <package id="NHibernate" version="3.2.0.4000" /> 
</packages> 

realmente me gustaría ver algo como esto: El intento de resolver la dependencia 'NHibernate (3.2.0.3001)'.

+3

Usted puede hacer esto como respondida a continuación. Pero tenga en cuenta que cualquiera que use su paquete y también use NHibernate, (o cualquier otra dependencia donde haya especificado la versión exacta del paquete) no podrá actualizarlo por ningún motivo a menos que usted lo permita. Este es un mal estado de cosas. Una "versión bloqueada" nos mordió recientemente: en nuestro caso, el paquete version-locked no era NHib sino un paquete no relacionado. La versión de bloqueo puede ser necesaria si hay cambios genuinos en una biblioteca en sentido ascendente, pero en nuestro caso que tuvimos no fue así; solo uso excesivo de esta sintaxis. Entonces, si lo usa, ¡úselo con precaución! – Anthony

Respuesta

96

Usted debe ser capaz de forzar una versión exacta con los soportes:

<dependency id="NHibernate" version="[3.2.0.3001]" /> 

información completa sobre los formatos que se pueden utilizar son en el sitio NuGet, aquí:

http://docs.nuget.org/docs/reference/version-range-specification

+0

¡No sé cómo no encontré esa página! Gracias. – devlife

+0

Puedes hacer esto. Pero tenga en cuenta que cualquiera que use su paquete y también use NHibernate, no podrá actualizar NHibernate por ningún motivo a menos que usted lo permita. Este no es un gran estado de cosas. – Anthony

+0

@Anthony Creo que este comentario es mejor sobre la pregunta que mi respuesta; Solo estaba mostrando cómo hacerlo, no abogando por eso.El problema que describes no se resuelve fácilmente sin embargo; si tienes dos lotes de código que simplemente no funcionan con la misma versión de NH (debido a errores, diferencias API, lo que sea), entonces ya estás jodido. La verdadera solución son las dependencias privadas (como Node), pero no veo que .NET obtenga el soporte "adecuado" para eso :( –

2

Según http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution y otras fuentes, simplemente especificando el límite inferior como

<dependencies> 
    <dependency id="NHibernate" version="3.2.0.3001" /> 
</dependencies> 

resultará en el nivel de revisión/patch más alta de la versión más bajo mayor/menor a juego esa versión.

A menos que malinterprete completamente la documentación, esto coincidiría con la versión 3.2. * Más alta, pero no con la versión 3.3. * O superior a menos que no se encuentre la versión 3.2. *.

Si hay alguna razón por la cual 3.2.0.3001 es la única versión contra la que desea depender, puede encontrar que su paquete no es compatible con otros paquetes que también dependen de NHibernate porque el otro paquete depende de NHibernate [3.2.0.3002,3.3) que significa al menos 3.2.0.3002 pero inferior a 3.3.

Cuestiones relacionadas