visual studio restaurar paquetes nupkg net microsoft instalar como cli .net nuget visual-studio-2012 .net-4.5

studio - Solución de retargeting de.Net 4.0 a 4.5: ¿cómo redirigir los paquetes de NuGet?



paquetes nuget c# (4)

He migrado una solución que actualmente apunta a .NET 4.0 en VS2010 a VS2012 y ahora me gustaría redirigirlo a .Net 4.5

De lo que no estoy seguro es de los paquetes de NuGet. Por ejemplo, EF5, que actualicé desde EF4 en VS2010, en realidad es EF 4.4, como puede ver aquí:

<Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>../packages/EntityFramework.5.0.0/lib/net40/EntityFramework.dll</HintPath> </Reference>

También puedo ver lo siguiente en packages.config para el proyecto:

<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="5.0.0" targetFramework="net40" /> </packages>

Así que mi pregunta es:

¿Cuál es la mejor práctica para redirigir todos los paquetes de NuGet que actualmente están configurados para apuntar a .NET 4.0 para apuntar a .NET 4.5?


Al intentar reinstalar los paquetes de solución, encontré un error de dependencia (a pesar de usar el indicador -ignoreDependencies ) y todos los archivos packages.config para cada proyecto se habían eliminado. En VS2013, parece que packages.config no se descarga de nuevo en el disco y se vuelve a agregar hasta que todas las dependencias / referencias actualizadas se vuelvan a adjuntar al proyecto.

En mi caso, lo que funcionó fue actualizar cada proyecto uno a la vez agregando el nombre del proyecto -ProjectName al comando update-package . En este caso, packages.config se actualiza a medida que se actualiza cada proyecto.

Puede que no sea práctico para soluciones muy grandes, pero parece un compromiso razonable seguir aprovechando la actualización automática para tantos proyectos como sea posible y aislar los problemáticos sin tener todos los paquetes. Config. En su solución eliminada en caso de fallo.



Para aquellos que tuvieron problemas con el comando update-package -reinstall <packagename> , considere ejecutarlo con el indicador -ignoreDependencies , como este:

update-package -reinstall <packagename> -ignoreDependencies

Este indicador dejará las dependencias de su paquete solo, de lo contrario, podrían actualizarse incluso si el paquete que originalmente quería reinstalar aún mantiene su versión en el mismo.

Más información here .


NuGet 2.1 ofrece una característica que hace esto mucho más simple: solo haga update-package -reinstall -ignoreDependencies desde la Consola de Package Manager.

NuGet 2.0 no maneja muy bien la reorientación de sus aplicaciones. Para cambiar los marcos de destino de sus paquetes, debe desinstalarlos y volver a instalarlos (tomando nota de los paquetes que ha instalado para que pueda reinstalarlos).

La razón por la que los paquetes se deben desinstalar y reinstalar es:

  • Al instalar un paquete, determinamos el marco de destino de su proyecto
  • Luego comparamos eso con el contenido del paquete, encontrando la carpeta / lib / apropiada (y / contenido / carpeta)
  • Las referencias de ensamblaje se agregan con Hint Paths que apuntan a la carpeta / lib / del paquete, con la subcarpeta derecha (/ lib / net40 por ejemplo)
  • Los archivos de contenido se copian de la carpeta packages / content /, con la subcarpeta derecha (/ content / net40 por ejemplo)
  • Registramos el targetFramework utilizado para instalar el paquete dentro del archivo packages.config
  • Después de cambiar el marco de destino de su proyecto, las rutas de pistas aún apuntan a net40
  • Cuando desinstala los paquetes, verificamos el targetFramework que se registró en packages.config para ver qué contenido / libs del marco objetivo eliminar de su proyecto.
  • Cuando reinstala el paquete, detectamos su marco de destino actualizado y hacemos referencia / copiamos las libs / content correctas