Creo que algunas personas no están entendiendo qué debe hacer la restauración de paquetes. Esta característica se agregó a NuGet con el único propósito de no requerir que los paquetes se verifiquen en el control de la versión. Mucha gente se quejaba de que los binarios comprometidos estaban explotando el tamaño de sus repositorios, y es aún peor cuando se usa un DVCS como git, donde todo el repositorio se descarga localmente e incluye todas las versiones del paquete Foo.
¿Qué hace exactamente Package Restore? Básicamente se ve en packages.config de cada proyecto y simplemente retira la versión específica del paquete en la lista. Es como eliminar la carpeta de paquetes y luego hacer git reset --hard
para recuperarlos (suponiendo que la carpeta esté marcada).
¿Por qué es esto importante? ¿Por qué no actualizar a la última versión del paquete? Si considera el caso de uso más común de Restauración de paquetes, que es hacer compilaciones automáticas, eso debería darle una pista. El servidor de compilación solo debe construir el proyecto que un desarrollador haya probado y comprometido. Si permites que el servidor de compilación decida cuándo actualizar un paquete, entonces tienes un proyecto que no ha sido probado por nadie. Como desarrollador, debe ser el que decida cuándo realizar la actualización.
Recuerde, la instalación o actualización de un paquete no consiste simplemente en extraer un archivo .nupkg y agregar referencias. Muchos paquetes tienen efectos secundarios, como la actualización de sus archivos .config, la adición de código, etc. Cuando instala un paquete, todos esos efectos secundarios ocurren en su copia local. Ahora puede confirmar su código y excluir los archivos del paquete.
Cuando otro desarrollador o el servidor de compilación verifique el código, tendrá exactamente el mismo código de efecto secundario que tenía menos los archivos del paquete. Package Restore simplemente extrae estos archivos del repositorio NuGet y ahora tenemos todo lo necesario para trabajar en este proyecto.
El equipo NuGet ha prometido mantener todas las versiones de paquetes para que siempre pueda desplegar la versión correcta. Sin embargo, como vimos hace unos meses, cuando el servidor NuGet cayó, prácticamente paralizó la Restauración de paquetes y muchas personas no pudieron construir.
Te recomiendo que configures tu propio repositorio NuGet (un simple uso compartido de archivos) y guardes copias de todos los paquetes que usas allí. De esta forma, no dependes de un servidor externo para tus compilaciones. Y como lo hace el equipo NuGet, debes conservar TODAS las versiones de un paquete. De esta manera, si tiene que regresar y crear una versión anterior de su proyecto, tendrá las versiones correctas del paquete disponibles.
Espero que esto explique cómo funciona la función y por qué funciona de esa manera.
Eso desafía el punto de restauración del paquete, ¿no? ... –
Sí, lo hace, pero el OP mencionó si había alguna configuración de sintaxis de paquetes para obtener las últimas versiones. Una vez que esto se haya hecho una vez, cualquier persona que use el repositorio podrá tomar el proyecto utilizando el paquete restore restore – dougajmcdonald
El proyecto en cuestión es parte de una plantilla de solución personalizada que estoy haciendo para nuestros proyectos internos. La idea es que un desarrollador cree una nueva solución a partir de la plantilla y obtenga toda la estructura (incluidas las referencias listas para los paquetes de infraestructura) en su lugar y lista para funcionar. No tengo problemas para escribir un script personalizado que repase todos los proyectos de la solución y vuelva a instalar los paquetes según sea necesario, pero decirles a las personas que comiencen a hurgar en una plantilla para que funcione correctamente ... –