La restauración del paquete NuGet no funciona

165

Revisé un proyecto en una computadora, revisé en otra y descubrí que faltan los binarios instalados por NuGet. También podría registrarlos en el control de origen, pero parece que hay una mejor solución:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Seguí esas instrucciones, ahora tengo una .nugetcarpeta donde debería estar, tengo las siguientes entradas en mi archivo .csproj:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

y, sin embargo, cuando reconstruyo mi solución, los paquetes que faltan no se restauran.

¿Qué me estoy perdiendo? ¿Cómo puedo diagnosticar este problema?

Eric J.
fuente
¿Ve que se desencadena nuget.exe en el registro de salida?
Pranav
Y lo más importante: ¿ves algún error en el registro de salida?
maartenba

Respuestas:

272

Tenga en cuenta que puede forzar la ejecución de la restauración del paquete ejecutando los siguientes comandos en la consola del administrador de paquetes nuget

Paquete de actualización-reinstalar

Fuerza la reinstalación de todo en la solución.


Update-Package -Reinstall -ProjectName myProj

Fuerza la reinstalación de todo en el proyecto myProj.

Nota : Esta es la opción nuclear. Al usar este comando, es posible que no obtenga las mismas versiones de los paquetes que ha instalado y eso podría generar problemas. Es menos probable que esto ocurra a nivel de proyecto en comparación con el nivel de solución.

Puede usar la -safeopción de parámetro de línea de comandos para restringir las actualizaciones a versiones más nuevas con el mismo componente de versión Mayor y Menor. Esta opción se agregó más tarde y resuelve algunos de los problemas mencionados en los comentarios.

Paquete de actualización-Reinstalar -Safe

Chris Marisic
fuente
77
@ NightOwl888 que suena como algo que debe notificarse como nuget, ya que no debería haber forma de que lo haga, a menos que tal vez siempre haya tenido problemas vinculantes con el infierno de DLL y, por suerte, estaba funcionando, pero reinstalarlo terminó su suerte de que funcione.
Chris Marisic
44
@nightowl si está utilizando el control de fuente, no debería ser tan difícil respaldar los cambios.
ErikE
44
El inconveniente principal aquí es que las versiones del paquete no se mantienen, por lo que se instalará la última versión del paquete. Esto puede ser un problema si su proyecto no es compatible con una nueva versión ..
JDandChips
44
Sí, la actualización-paquete-reinstalación funcionó para mí. No tengo idea de por qué el IDE simplemente no lo hace. Todo está configurado correctamente. Ugghh, lo juro, NuGet es bueno y molesto.
Jeremy Ray Brown
2
¡Qué amable de su parte agregar el "¡importante! ¡Esto podría destruir su proyecto" en la PARTE INFERIOR de su respuesta!
devman
25

Para otros que se topan con esta publicación, lea esto.

NuGet 2.7+ nos presentó la Restauración automática de paquetes . Esto se considera un enfoque mucho mejor para la mayoría de las aplicaciones, ya que no altera el proceso de MSBuild. Menos dolores de cabeza

Algunos enlaces para comenzar:

Dave New
fuente
2
Gracias por una respuesta adecuada a la versión actual de NuGet.
Eric J.
20

Debe elegir una de las siguientes formas:

Reinstalar un paquete por su nombre en todos los proyectos de la solución:

Update-Package –reinstall <packageName>

Reinstalar un paquete por su nombre e ignorar sus dependencias en todos los proyectos de la solución:

Update-Package –reinstall <packageName> -ignoreDependencies

Reinstalar un paquete por su nombre en un proyecto:

Update-Package –reinstall <packageName> <projectName>

Reinstalar todos los paquetes en un proyecto específico:

Update-Package -reinstall -ProjectName <projectName>

Reinstalar todos los paquetes en una solución:

Update-Package -reinstall 
Mohammad Dayyan
fuente
Resolvió mi problema de estilo rápido y sucio.
blackorchid
20

¿Habilitó el modo de restauración de paquetes en el proyecto que tiene los paquetes / binarios faltantes? Existe un problema conocido que requiere que los paquetes se instalen correctamente al habilitar el modo de restauración:

http://nuget.codeplex.com/workitem/1879


El enlace original está muerto; esto podría ser un reemplazo: https://github.com/NuGet/Home/issues/1968

Alexandre Dion
fuente
3
Gracias por el enlace. Habilitar el modo de restauración de paquetes en un proyecto que tenga los paquetes / binarios faltantes será un caso común. Si no tiene los paquetes, es cuando quiere obtenerlos. El caso de uso falla.
Anthony
2
Cuando dice "habilitar el modo de restauración de paquetes en el proyecto que tiene los paquetes faltantes", ¿qué quiere decir? ¿Hay un comando de consola que necesito ejecutar para hacer eso?
CodeWarrior el
90
NuGet me falla a diario, lo desprecio por completo.
Jammer
14

VS 2017

Herramientas> Administrador de paquetes NuGet> Configuración del Administrador de paquetes> General Haga clic en "Borrar todos los cachés NuGet"

Niaz Morshed
fuente
Al verificar una solución fuera del control de origen (administrado usando el Visual Studio Team Explorer con DevOps / Git), las compilaciones no fueron posibles debido a la falta de referencias y los paquetes de restauración no hicieron nada. Esta solución fue la correcta para esta circunstancia.
PJRobot
12

Me he encontrado con este problema en dos escenarios.

Primero, cuando intento construir mi solución desde la línea de comando usando msbuild.exe. En segundo lugar, cuando intento construir el sln y los proyectos que lo contienen en mi servidor de compilación usando TFS y CI.

Recibo errores alegando que faltan referencias. Al inspeccionar tanto mi directorio de compilación local como el del servidor TFS, veo que la carpeta / packages no se crea y los paquetes nuget no se copian. Seguir las instrucciones que figuran en la respuesta de Alexandre http://nuget.codeplex.com/workitem/1879 tampoco me funcionó.

He habilitado Restaurar paquetes a través de VS2010 y he visto que las compilaciones solo funcionan desde VS2010. Nuevamente, el uso de msbuild falla. Mi solución probablemente sea totalmente inválida, pero para mi entorno esto funcionó desde una compilación de línea de comando localmente, así como desde una compilación de CI en TFS.

Entré en. \ Nuget y cambié esta línea en el archivo .nuget \ NuGet.targets:

de:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

a: (aviso, sin las comillas alrededor de las variables)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

Entiendo que si mis directorios tienen espacios en ellos, esto fallará, pero no tengo espacios en mis directorios, por lo que esta solución consiguió que mis compilaciones se completaran con éxito ... por el momento.

Diré que activar el registro de nivel de diagnóstico en su compilación ayudará a mostrar qué comandos está ejecutando msbuild. Esto es lo que me llevó a hackear el archivo de objetivos temporalmente.

PerryM
fuente
Tuve el problema con las comillas dobles y tuve que hacer la misma edición que tú. ¡Muy frustrante!
Greg
5

Si algo más no funcionó, intente:

  1. Proyecto cerrado
  2. Elimine la carpeta de paquetes en su carpeta de solución.
  3. Abra Project nuevamente y restaure los paquetes de Nugget nuevamente.

Funcionó para mí y es fácil de intentar.

Loaderon
fuente
2
Esto funcionó para mí. En el paso 3, no tuve que restaurar manualmente los paquetes, se restauraron automáticamente cuando abrí el proyecto.
Tawab Wakil
5

Si ninguna de las otras respuestas funciona para usted, intente lo siguiente, que fue lo único que funcionó para mí:

Encuentra tu .csprojarchivo y edítalo en un editor de texto.

Encuentra la <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">etiqueta en tu .csprojarchivo y elimina todo el bloque.

Vuelva a instalar todos los paquetes en la solución:

Update-Package -reinstall

Después de esto, sus paquetes nuget deberían restaurarse, creo que este podría ser un caso marginal que solo ocurre cuando mueve su proyecto a una ubicación diferente.

Jako Basson
fuente
Esto me salvó de volverme completamente loco. ¡Gracias!
Jeff Hay
4

Solo para otros que podrían encontrarse con este problema, pude resolver el problema cerrando Visual Studio y volviendo a abrir el proyecto. Cuando se cargó el proyecto, los paquetes se restauraron durante la fase de inicialización.

Mike Perrenoud
fuente
4

Para mí tenía una etiqueta vacía NuGetPackageImportStamp en .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

Idealmente debería contener algún GUID válido.

Quitar la etiqueta mencionada anteriormente y luego "Restaurar Nugets" funcionó para mí.

anu
fuente
1

A veces sucede algo extraño y el uso de Visual Studio para restaurar automáticamente no funciona. En ese caso, puede usar la consola NuGet Package Manager. Eso se abre en Visual Studio desde Herramientas -> Administrador de paquetes NuGet -> Consola del Administrador de paquetes . Los comandos dentro de la consola son simples. Y para obtener ayuda contextual mientras escribe un comando, simplemente presione el botón y le dará todas las opciones que comienzan con las letras que está escribiendo. Entonces, si un paquete no está instalado, por ejemplo log4net, escriba el siguiente comando:

Paquete de instalación log4net

Puede hacer mucho más, como especificar la versión para instalar, actualizar un paquete, desinstalar un paquete, etc.

Tuve que usar la consola para ayudarme cuando Visual Studio estaba actuando como un bicho raro.

Jeremy Ray Brown
fuente
1

La restauración automática de paquetes fallará por cualquiera de los siguientes motivos:

  1. No eliminó los archivos NuGet.exe y NuGet.targets de la carpeta .nuget de la solución (que se puede encontrar en la carpeta raíz de la solución)
  2. No habilitó la restauración automática de paquetes desde Herramientas >> Opciones >> Administrador de paquetes Nuget >> Configuración general.
  3. Olvidó eliminar manualmente las referencias en todos sus proyectos al archivo Nuget.targets
  4. Debe reiniciar Visual Studio (asegúrese de que el administrador de tareas elimine el proceso antes de volver a iniciarlo).

El siguiente artículo describe con más detalle cómo abordar los puntos 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

CShark
fuente
1
Con respecto a su punto n. ° 1, el enlace que proporciona contradice su consejo: "Si está utilizando TFS 1. Elimine los archivos NuGet.exe y NuGet.targets de la carpeta .nuget de la solución 2. Guarde el archivo NuGet.Config para continuar omitiendo agregando paquetes al control de origen ".
Andrew Dennison
1

Tuve paquetes de NuGet que se rompieron después de hacer una Restauración del sistema en mi sistema, haciendo una copia de seguridad de unos dos días. (Mientras tanto, los paquetes NuGet se habían instalado). Para solucionarlo, tuve que ir a la carpeta .nuget \ packages en mi perfil de usuario, buscar los paquetes y eliminarlos. Solo entonces Visual Studio sacaría los paquetes y los agregaría correctamente como referencias.

Aaron
fuente
1

La mejor solución que encontré al crear un nuevo proyecto desde cero, luego importé todos los archivos fuente con el código. Mi proyecto no fue tan complicado, así que no tuve ningún problema desde allí.

Martin Deivid
fuente
1

Ninguna de las otras soluciones funcionó en mi situación:

Las dependencias de AspNetCore se habían instalado / desinstalado y se estaban almacenando en caché. 'AspNetCore.All' se negaría a actualizar / reinstalar / eliminar correctamente. E independientemente de lo que hice, usaría las dependencias en caché (con las que no era compatible), porque eran una versión superior.

  1. Copia de seguridad de todo. Tenga en cuenta la lista de dependencias que deberá reinstalar, salga de VisualStudio
  2. Abra todos los archivos .proj en un editor de texto y elimine todos PackageReference
  3. En cada proyecto, eliminar las bin, objcarpetas
  4. Elimine las carpetas de "paquetes" que encuentre en la solución.
  5. Abra la solución, entre Tools > Nuget Package Manager > Package Manager Settingsy Clear all Nuget caches. Compruebe la consola porque puede fallar al eliminar algunos elementos: copie la ruta de la carpeta y salga de Visual Studio.
  6. Elimine cualquier cosa de esa carpeta. Vuelva a abrir la solución y comience a instalar paquetes nuget nuevamente desde cero.

Si eso todavía no funciona, repita pero también busque en su unidad en el explorador de Windows nugety elimine todo lo que se vea en caché.

jv_
fuente
0

vs2015 no habilita el problema de restauración de nuget. Mi solución:

  1. agregue la carpeta .nuget, agregue el archivo NuGet.Config y NuGet.targets en el directorio .nuget

  2. cada archivo de proyecto agrega: compilación

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>
方 权 军
fuente
Esta es la vieja forma de hacerlo. Vea la respuesta de @davenewza y su enlace a blog.davidebbo.com/2014/01/…
timB33
0

Si el error al que se enfrenta es "no se puede conectar al servidor remoto" como era mío, entonces le beneficiaría tener esta verificación además de las verificaciones proporcionadas en los comentarios anteriores.

Vi que había 2 fuentes de paquetes NUGET desde las que se podían descargar los paquetes (dentro de Herramientas-> Administrador de paquetes Nuget-> Configuración del Administrador de empaquetadores). Una de las fuentes del paquete no funcionaba y Nuget estaba tratando de descargar solo desde esa fuente.

Las cosas se pusieron en su lugar una vez que cambié la fuente del paquete para descargar desde: https://www.nuget.org/api/v2/ EXPLICAMENTE en la configuración

vamsee
fuente
0

En mi caso, un intento de restauración de Nuget abortado había dañado uno de los packages.configarchivos de la solución. No descubrí esto antes de revisar mi árbol de trabajo git. Después de revertir los cambios en el archivo, la restauración de Nuget estaba funcionando nuevamente.

Frederik Struck-Schøning
fuente
0

Hay un acceso directo para hacer que la restauración de Nuget funcione: 1. Asegúrese de que la conexión a Internet o las URL de Nuget sean correctas en el menú de opciones de VS Tools 2. Mire la carpeta .nuget o nuget en la solución, de lo contrario, copie desde cualquiera para obtener nuget.exe

  1. BORRAR carpetas de paquetes, si existe

  2. Abra la consola del administrador de paquetes, ejecute este comando

    • pegue la ruta completa del nuget.exe ¡RESTAURAR la ruta completa del archivo .sln!
  3. use el comando Install-pacakge, si la compilación no se logró para las referencias faltantes. Espero que ayude (HIH)
HydTechie
fuente
0

En VS2017, haga clic con el botón derecho en la solución => Abrir línea de comandos => Línea de comandos del desarrollador.

Una vez que esté abierto, escriba (y presione enter después)

dotnet restore

Eso restaurará cualquiera / todos los paquetes, y obtendrá una buena salida de consola de lo que se ha hecho ...

James Joyce
fuente