visual studio microsoft manager cli nuget nuget-package

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).



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:

  1. Incluir archivo de especificación (con el botón derecho del ratón -> Incluir en el proyecto) en el proyecto
  2. 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.