2011-02-23 23 views
10

Tengo mi repositorio de la biblioteca nuget local por separado, tanto para mis bibliotecas de clases personales como de trabajo.Actualización del paquete Nuget local en el evento posterior a la construcción

He creado algunos de los paquetes nuget para las bibliotecas que ya no están en desarrollo. Hice esto solo para ellos porque no sé cómo actualizarlos automáticamente tan pronto como se construya mi proyecto.

Me he dado cuenta de que todo el trabajo está siendo realizado por la línea de comandos nuget con el símbolo del sistema de Visual Studio. Así que puedo hacer fácilmente el trabajo que necesitaba (¡por supuesto que conocería los comandos perfectamente y no lo hago!)

Básicamente quiero que las siguientes tareas se ejecuten en el evento posterior a la construcción de mi proyecto.

El proyecto de construcción:

  1. proyecto de copia de DLL en una carpeta específica (carpeta de la liberación del paquete Nuget)
  2. la actualización de archivos nuspec para la nueva versión de archivo (mi proyecto está aumentando la versión del archivo en cada generación)
  3. crear nuevo archivo con la versión nupkg nuevo archivo

Phil Haack muestra algunos de esta función, pero es todavía un prototipo por lo que yo puedo decir.

Así que mi requisito es el anterior. ¿Alguien más ha logrado esto?

Respuesta

6

Jeremy Skinner ha escrito a blog post sobre cómo realiza construcciones automáticas de paquetes y los carga en NuGet Gallery. Creo que coincide con tus requisitos.

Básicamente él usa MsBuild para aplicar la versión (con la tarea MsBuild Community Extensions UpdateXml) al archivo nuspec e invoca el nuget.exe para empaquetarlo.

9

Parece que la solución seleccionada funcionaría, pero parece que hay una solución más simple para sus necesidades.

Puede crear un archivo nuspec que lea los datos de los metadatos del proyecto. Sólo tiene que hacer esto una vez con este comando:

C:\<Path to project>\nuget spec 

Esto crea tokens '' en el archivo de especificación que será reemplazado por los metadatos del proyecto cuando se crea el paquete Nuget. Esto incluye la versión del archivo. Querrá reemplazar y porque se supone que todos los proyectos deben tenerlos.

Más detalles se pueden encontrar aquí: http://docs.nuget.org/docs/creating-packages/Creating-and-Publishing-a-Package#From_a_project

Entonces ...

Para .Net Framework (vieja escuela) proyecta, en el post de que proyecto de construcción de eventos que puede hacer esto:

nuget pack "$(ProjectPath)" 
xcopy "$(TargetDir)*.nupkg" "<path where you are hosting your local nuget repo>" /C /Y 

(asumiendo que nuget.exe está disponible en su sistema PATH).

Para .Net Core y proyectos estándar, nuget no puede embalarlos (ver https://github.com/NuGet/Home/issues/4491).En su lugar, utilice esto como su paso posterior a la generación:

dotnet pack "$(ProjectPath)" --no-build --include-source --include-symbols --output "<path where you are hosting your local nuget repo>"

Por supuesto, se pueden ajustar las opciones para satisfacer sus necesidades. Consulte https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack?tabs=netcore2x para conocer las opciones del comando dotnet pack.

+6

También puede evitar el proceso de dos pasos si desea establecer el directorio de salida. Además, es posible que desee considerar si necesita incluir dependencias: nuget pack "$ (ProjectPath)" -outputdirectory "c: \ NuGetPackages" -IncludeReferencedProjects –

+0

Esto no funcionará para un alimentador NuGet remoto que no expone el ruta del paquete como recurso compartido –

0

Recientemente publiqué una solución para esto que realmente crea/actualiza los archivos nuspec durante la compilación, por lo que no tiene que hacerlo manualmente, y luego crea los archivos nupkg.

Todo lo que tendrá que agregar es un evento posterior a la creación para copiar los paquetes a su destino (o agregarlo como una etapa opcional a mi solución).

Puede encontrar un artículo con walk-through guide here y source code + binary here.

Cuestiones relacionadas