2012-10-10 17 views
5

Antecedentes referencia de archivo DLL: que tienen dos conjuntos denominados "A" y "B". "" A "hace referencia a" B "." A "también hace referencia a algunos dll adicionales (Microsoft.Enterprise Library.Data y Microsoft Enterprise Library.Common) que creo que deberían estar empaquetados en nupkg.NuGet Envasado y

Creo que mi paquete nupkg debe contener la salida de montaje de la "a", "B" y los dos conjuntos de "Microsoft Enterprise" para que cuando alguien instala mi paquete se les dará una referencia directa a la "a" de la Asamblea y los otros tres conjuntos estarían disponibles (pero no hace referencia directamente, por lo que su aplicación correría Cuál es la forma correcta de empaquetar los archivos DLL no hace referencia a

Intento # 1:.? embalaje todos los DLL necesarios en una carpeta \ net35 de acuerdo con el NuGet documentation regarding the "references" elemento "Si se omite este elemento, se aplica el comportamiento habitual, que es hacer referencia a cada conjunto en la carpeta lib"

Por lo tanto, supongo que al usar este elemento solo se incluirán los ensamblados especificados como referencias. Este no parece ser el caso si también uso un elemento "archivo" <file src=*.dll" target="lib\net35" />. Si tengo un elemento como este que copia todos los archivos DLL al paquete, el ensamblado que implementa este paquete hace referencia a TODOS los ensamblados en el directorio \ net35. Esto no es lo que quiero hacer. Me esperaba un poco de magia que sólo el conjunto especificado en "referencias" sería una real y hacer referencia a todos los demás permanecerían en la carpeta \ packages estallado y la aplicación funcionarían ya que todos los archivos DLL se encuentran en el mismo directorio. Tal vez soy incorrecto ....

Intento # 2 Agregar como contenido para proyectar Si coloco las asambleas sin referencia a \ content \ lib en lugar de lib \ net35, cuando se envasa esto crea una carpeta \ lib en el proyecto y vuelca directamente los \ dlls \ lib dlls en ese proyecto, lo que nos obliga a verificarlos en el control de fuente. Esto funciona, compila y funciona como yo quiero, pero realmente no quiero que estos estén almacenados en la carpeta \ lib del proyecto.

Estoy buscando una solución en la que el proyecto obtenga las referencias a "A" y aún pueda ejecutarse con otros conjuntos requeridos ubicados conjuntamente pero no referenciados directamente. Parece que el intento n. ° 1 es el camino correcto, pero tal vez hay un error.

FYI, entré en este as a issue with NuGet directamente a ver que el equipo tiene una respuesta así.

Respuesta

3

Esto fue un error introducido en Nuget 2.1 y posteriormente se fijó en las versiones 2.2 Nuget que fue lanzado en diciembre de 2012.

Usando Intento # 1 en el envío original ahora funciona correctamente.

0

no creo que su "Intento 1" va a funcionar en la práctica. Si solo hace referencia a "A". Cuando construya su paquete, solo se copiará "A" (por defecto) en el directorio de salida. Luego, cuando distribuya la aplicación, solo "A" existirá y causará errores.

Debería tener referencias a todas las DLL para ejecutar su aplicación (o encontrar otra solución que copiará automáticamente las DLL referenciadas en el directorio de salida, pero no estoy seguro de que haya mucho valor en no especificar la referencia directamente). Como solo tiene algunas DLL, probablemente sea mejor dejar fuera la sección de referencias para que todas las DLL se mencionen automáticamente desde la carpeta lib.

+0

Esta fue una regresión/error introducido en NuGet 2.1, Han corregido el problema y que se fija en el punto 2.2 de este mes. – Jay

Cuestiones relacionadas