¿Hay alguna forma de actualizar automáticamente nuget.exe en la carpeta .nuget cuando se usa la restauración de paquetes?

92

Mi equipo ha estado usando la opción Habilitar restauración de paquetes desde Nuget 1.5 para mantener los paquetes fuera de nuestro control de código fuente. Cuando se lanzó Nuget 1.6, notamos un problema en el que no se estaban bajando los paquetes y lo rastreamos hasta Nuget.exe en la carpeta .nuget necesaria para actualizar a 1.6 para que coincida con el Administrador de paquetes.

¿Cuál es la mejor manera de actualizar una solución una vez que se ha actualizado Nuget? No veo una manera fácil desde el estudio de saber qué versión de nuget está en la carpeta de la solución. Hasta ahora eliminamos la carpeta .nuget y volvemos a ejecutar el comando Enable Package Restore.

Almiar
fuente

Respuestas:

148

Sugeriría actualizar .nuget \ nuget.exe con este comando desde la línea de comando:

nuget.exe update -self

[EDITAR]: Primero cierre VS Solution. Si hay una actualización y se abre la solución, nuget.exe se eliminará de la solución.

Usted podría actualizar automáticamente nuget.exe en restaurar mediante la modificación de los .nuget \ nuget.targets para añadir el comando anterior. Miraría el comando de restauración allí como un ejemplo. Pero no estoy seguro de si vale la pena, las actualizaciones de nuget.exe no son tan comunes y la compatibilidad con versiones anteriores debería fallar muy raramente.

Alexandre Dion
fuente
Probé esto en uno de mis proyectos. Actualizó NuGet.exe pero parecía haberlo eliminado de mi solución. Sé que puedo volver a agregarlo, pero me pareció extraño.
Rick
Ah, cierto, esta vez probé una actualización real y nuget.exe también se eliminó de la solución VS para mí. (No lo recibí anteriormente ya que nuget.exe estaba actualizado). Sucede porque durante la actualización, el nuget.exe actual se mueve primero a nuget.exe.old, por lo que la referencia del archivo está rota. Dudo que esto se solucione, ejecutaría el comando con la solución cerrada.
Alexandre Dion
Parece que realizar la actualización automática no le proporcionaría un nuevo archivo NuGet.targets, lo que podría ser un problema. Creo que el equipo de NuGet realizó algunos cambios en el archivo de destinos entre las versiones 1.6 y 1.7.
William Gross
@William Gross, bueno, podría verificar si hubo una actualización de nuget.org/packages/NuGet.Build (ese es el paquete que contiene nuget.targets)
Alexandre Dion
funcionó para mí, solo recuerde ejecutar el cmd como administrador
Mohammad
31

Encontré que la mejor manera de manejar esto es simplemente eliminando la carpeta .nuget y volviendo a habilitar la restauración de paquetes de toda la solución. Como se dijo anteriormente, puede agregar un comando de autoactualización a su compilación, pero eso no actualizará los destinos o los archivos de configuración si hay cambios entre las versiones (o eliminará la referencia de su solución). Quizás no sea tan importante, pero esta es la forma segura de asegurarse de tener los últimos archivos exe y de configuración. Y al final del día, la actualización es solo un problema si necesita acceso a un nuevo comando o si eventualmente hay un cambio importante en una nueva versión.

Chris Kirby
fuente
3
+1 - He descubierto que esta es la mejor manera de obtener actualizaciones NuGet.exe tanto del NuGet.targetsarchivo como del archivo (que también es importante). Solo asegúrese de guardar las personalizaciones que haya realizado en el NuGet.targetsarchivo (por ejemplo, PackageSources personalizados) para poder volver a aplicarlas al nuevo archivo.
Jesse Webb
genial que funcionó para mí como un encanto !! gracias por la información
Gayan
-3

Vea la publicación de David Ebbo en su blog

Básicamente, todo lo que necesita hacer es crear un archivo NuGet.Config junto a su archivo .sln, que contenga:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>
Rodolpho Brock
fuente
1
La pregunta pregunta cómo actualizar automáticamente nuget.exe a la última versión cuando se usa la restauración de paquetes. La publicación del blog de David Ebbo solo explica cómo restaurar paquetes usando nuget.exe.
Frith
Probablemente debería especificar qué parte de la pregunta responde, entonces, al mirar el título de la pregunta y la respuesta aceptada, es fácil considerar esta respuesta fuera de lugar ...
Jens