studio - nuget package login
NuGet Assembly fuera de la carpeta lib (7)
Voy a sacar un par de preguntas aquí ... primero, ¿con NuGet es posible crear un paquete a partir de unas pocas DLL? No hay un proyecto de estudio visual, solo la línea de comando y un par de archivos DLL precompilados.
En segundo lugar, suponiendo que sea posible, ¿por qué recibo continuamente la advertencia "Asamblea fuera de la carpeta lib"? He intentado todo lo que puedo pensar para obtener ensamblajes asociados para que se agreguen a sí mismos como referencias dentro del paquete NuGet.
Mi estructura de archivos se ve así
Root
- File1.dll
- lib
- File2.dll
- File3.dll
Cuando le digo a NuGet que lo empaquete con un .nuspec como este
<?xml version="1.0"?>
<package >
<metadata>
<id>File1.dll</id>
<version>1.0.0</version>
<authors>thisguy</authors>
<owners>thisguysmom</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>This is some library</description>
<releaseNotes>Porting to NuGet</releaseNotes>
<copyright>Copyright 2012</copyright>
<references>
<reference file="File2.dll" />
<reference file="File3.dll" />
</references>
</metadata>
</package>
Recibo esa advertencia. Por lo que estoy leyendo, ni siquiera debería tener que definir el nodo de referencias en ninguno de mis proyectos, ya que los elementos de la carpeta lib deberían agregarse automáticamente como referencias.
¿Alguien por ahí entiende este desastre NuGet?
Alexandre se refiere a la carpeta "lib" que se crea cuando creas un paquete NuGet. Puede abrir .nupkg como lo haría con cualquier archivo comprimido. Allí, verá una carpeta lib / netXX donde XX es la versión del framework .NET al que está apuntando. Entonces, cuando empaque su archivo NuGet, asegúrese de que File1.dll se encuentre dentro de la carpeta lib.
Con la versión de NuGet que está actualizada a partir de esta publicación (y supongo que también las versiones posteriores), puede usar el archivo .csproj, en conjunto con el archivo .nuspec para crear el paquete. Lo que hicimos fue crear un archivo .nuspec (usando nuget spec y luego personalizarlo) e incluirlo en el proyecto.
Con el archivo .nuspec personalizado, usamos el comando:
nuget pack sample.csproj -IncludeReferencedProjects
En ese momento construyó .nupkg y no emitió ningún problema. El archivo .nupkg apareció en la carpeta de salida normal (en mi caso por defecto, bin / debug).
Cualquier dll que desee referencia debe estar en la carpeta lib. La advertencia es porque file1.dll está fuera de lib y se ignorará durante la instalación del paquete. (Otras carpetas especiales son "contenido" y "herramientas")
Yo había usado esta estructura:
Root
- lib
- File1.dll
- File2.dll
- File3.dll
Consulte: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions para obtener detalles adicionales.
Entran en la carpeta "lib" al incluirse en la carpeta bin / debug o bin / release en .NET. Por lo tanto, debe obtener la compilación del proyecto para copiar localmente en las DLL externas para que las incluya en la carpeta bin en compilación.
Me encontré con este problema. Nuget está esperando una estructura que se vea así:
root
- lib
- net40
- File1.dll
- File2.dll
- File3.dll
net40 o net20 o net45 según corresponda a su versión .net.
correr
nuget pack yourlibrary.nuspec
para empacarlo
Eso empacará el directorio mayorista y lo colocará en nupkg. Los mensajes de error desaparecerán en ese punto.
Puede agregar referencias a otro dll agregando debajo de la etiqueta dentro en el archivo nuspec
<package>
<metadata>
...
</metadata>
<files>
<file src="../ReferencedFolder/*.*" target="lib/net40/" />
</files>
</package>
Utilicé la solución del Prof. Von Lemongargle, y para mí fue una gran solución. Importante:
- Incluir archivo de especificación (con el botón derecho del ratón -> Incluir en el proyecto) en el proyecto
- Dar al archivo de especificación EL MISMO NOMBRE DE ARCHIVO de su proyecto (myproject.csproj, myproject.nuspec)
Esto funciona perfectamente en Visual Studio 2012.