visual-studio-2012 - virtualstudio - visual studio code tutorial español pdf
¿Restaurando las referencias de Nuget? (13)
Tengo solución y proyecto en Visual Studio 2012.
El proyecto tiene un archivo packages.config
en la raíz del proyecto.
A los efectos de esta pregunta, supongamos que eliminé accidentalmente estas bibliotecas de la sección References
de mi proyecto.
Al acceder al administrador de paquetes de NuGet, la interfaz sigue informando un tic junto a estos paquetes, lo que indica que están instalados.
La única forma en que puedo ver cómo solucionar esta situación es eliminar todas las entradas de packages.config
, que solucionará el problema de la interfaz NuGet y las informará como instaladas, y volverá a agregar cada una.
¿Hay una manera más inteligente? Esperaba que habilitar ''habilitar nuget para restaurar los paquetes faltantes'' lo resolviera, pero parece que no hace nada.
- Copie el archivo packages.config del proyecto y aplica todas las modificaciones de versión
Desinstalar todo el paquete y eliminar las dependencias
$packages = Get-Package -ProjectName [nameOfProjectToRestore] foreach ($package in $packages) { uninstall-package -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ; }
Borre la carpeta de paquetes en la raíz del proyecto
Copie los archivos modificados package.config en la carpeta raíz del sitio web
Ejecute este código para restaurar el proyecto
$packages = Get-Package -ProjectName [nameOfProjectToRestore] foreach ($package in $packages) { uninstall-package -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ; } foreach ($package in $packages) { install-package $package.Id -ProjectName [nameOfProjectToRestore] -Version $package.Version }
Agregué las DLL manualmente. Haga clic con el botón derecho en Referencias en el proyecto, seleccione Agregar referencia y luego, en el cuadro de diálogo, presione el botón Examinar. Las DLL NuGet estaban en el directorio de paquetes de la solución. Para obtener los nombres de ellos, puede hacer clic con el botón secundario en las referencias de otro proyecto que esté funcionando correctamente y seleccionar propiedades y buscar en la propiedad de la ruta.
El siguiente script se puede ejecutar en la ventana de la consola de Package Manger, y eliminará todos los paquetes de cada proyecto en su solución antes de volver a instalarlos.
foreach ($project in Get-Project -All) {
$packages = Get-Package -ProjectName $project.ProjectName
foreach ($package in $packages) {
Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
}
foreach ($package in $packages) {
Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
}
}
Esto ejecutará nuevamente la secuencia de comandos de instalación de cada paquete, que debería restaurar las referencias de ensamblaje faltantes. Desafortunadamente, todas las otras cosas que pueden hacer los scripts de instalación, como crear archivos y modificar configuraciones, también volverán a suceder. Es probable que desee comenzar con una copia de trabajo limpia y utilizar su herramienta SCM para seleccionar y elegir qué cambios debe conservar en su proyecto y cuáles ignorar.
En Visual Studio 2015 (Soulution está bajo el control de fuente, MVC-Project), Update-Package -Reinstall -ProjectName Your.Project.Name
funcionó, pero Update-Package -Reinstall -ProjectName Your.Project.Name
algunos bloqueos de escritura.
Tuve que eliminar los "paquetes" -Folder manualmente antes. (Parecía estar bloqueado debido al control de fuente).
Además, tuve que volver a instalar el MVC-Package desde NuGet Package Manager.
En caso de que ayude a alguien: en mi caso, tengo algunas bibliotecas compartidas (que tienen sus propios proyectos / soluciones TFS), todas combinadas en una sola solución.
Nuget restauraría proyectos con éxito, pero faltaría la DLL.
El problema subyacente era que, aunque su solución tiene su propia carpeta de paquetes y los ha restaurado correctamente en esa carpeta, el archivo del proyecto (por ejemplo, .csproj) hace referencia a un proyecto diferente que puede no tener el paquete descargado. Abra el archivo en un editor de texto para ver de dónde provienen sus referencias.
Esto puede ocurrir al administrar paquetes en diferentes soluciones compartidas interconectadas, ya que probablemente desee asegurarse de que todas las DLL estén en el mismo nivel, puede configurar esto en el nivel superior. Esto significa que a veces buscará en una solución completamente diferente para una DLL referenciada y, por lo tanto, si no tiene todos los proyectos / soluciones descargados y actualizados, entonces puede obtener el problema anterior.
En caso de que esto ayude a alguien, para mí, ninguno de los anteriores fue suficiente. Todavía no pude construir, VS aún no pudo encontrar las referencias. La clave fue simplemente cerrar y volver a abrir la solución después de restaurar los paquetes.
Aquí está el escenario (usando Visual Studio 2012):
Abre una Solución que tiene paquetes faltantes. Las referencias muestran que VS no puede encontrarlos. Hay muchas formas de restaurar los paquetes faltantes, incluidos
- construyendo una solución que está configurada para restaurar automáticamente
- abriendo la consola de Package Manager y haciendo clic en el botón "Restaurar"
- haciendo
nuget restore
si tienes la línea de comando nuget instalada
Pero no importa cuál sea el enfoque, esas referencias aún se mostrarán como ausentes. Y cuando lo construyas, fallará. Suspiro. Sin embargo, si cierra la solución y la vuelve a abrir, ahora VS verifica de nuevo esos agradables <HintPath>
, descubre que los paquetes están de vuelta donde pertenecen, y todo está bien con el mundo.
Actualizar
¿Visual Studio aún no ve que tienes el paquete? ¿Sigues mostrando una referencia que no puede resolver? Asegúrese de que la versión del paquete que restauró sea exactamente la misma que la <HintPath>
en su archivo .csproj. Incluso un número menor de corrección de errores (por ejemplo, 1.10.1 a 1.10.2) hará que la referencia falle. Puede solucionar esto editando directamente su xs de csproj, o eliminando la referencia y haciendo una nueva apuntando a la versión recién restaurada en el directorio de paquetes.
Esta secuencia de comandos reinstalará todos los paquetes de un proyecto sin desordenar las dependencias o instalar dependencias que puedan haber sido eliminadas intencionalmente. (Más para los desarrolladores de su paquete de parte.)
Update-Package -Reinstall -ProjectName Proteus.Package.LinkedContent -IgnoreDependencies
Si bien la solución proporcionada por @jmfenoll funciona, se actualiza a los últimos paquetes. En mi caso, habiendo instalado beta2 (prerelease) actualizó todas las libs a RC1 (que tenía un error). Por lo tanto, la solución anterior solo hace la mitad del trabajo.
Si se encuentra en la misma situación que yo y desea sincronizar su proyecto con la versión exacta de los paquetes NuGet que tiene / especificó en su paquete.config, entonces este script podría ayudarlo. Simplemente cópielo y péguelo en su consola de Package Manager
function Sync-References([string]$PackageId) {
get-project -all | %{
$proj = $_ ;
Write-Host $proj.name;
get-package -project $proj.name | ? { $_.id -match $PackageId } | % {
Write-Host $_.id;
uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
install-package -projectname $proj.name -id $_.id -version $_.version
}
}
}
Y luego ejecutarlo ya sea con un nombre de paquete específico como
Sync-References AutoMapper
o para todos los paquetes como
Sync-References
Los créditos van a Dan Haywood y su publicación en el blog .
Sufrí demasiado este problema, en mi caso se verificó la descarga de NuGet que faltaba (pero no se está restaurando) y no puedo desinstalar y volver a instalar porque modifiqué algunos de los paquetes instalados ... así que:
Acabo de limpiar el caché y reconstruir y funcionó. (Herramientas-Opción-Nuget Package Manager - General)
también este enlace ayuda a https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore .
Tengo que estar de acuerdo con @Juri en que la respuesta ampliamente popular de jmfenoll no está completa. En el caso de referencias rotas, presento que la mayoría de las veces no desea actualizar el último paquete, sino que solo corrige sus referencias a las versiones actuales que está usando. Y Juri proporcionó una útil función Sync-References
para hacer justamente eso.
Pero podemos ir un poco más allá, permitiendo la flexibilidad de filtrar por proyecto y paquete:
function Sync-References([string]$PackageId, [string]$ProjectName) {
get-project -all |
Where-Object { $_.name -match $ProjectName } |
ForEach-Object {
$proj = $_ ;
Write-Output (''Project: '' + $proj.name)
Get-Package -project $proj.name |
Where-Object { $_.id -match $PackageId } |
ForEach-Object {
Write-Output (''Package: '' + $_.id)
uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force
install-package -projectname $proj.name -id $_.id -version $_.version
}
}
}
Tuve el mismo problema con las referencias faltantes. Debajo de mi escenario:
- Instalación fresca de Windows 10 y VS Community 2015
- Acabo de comprobar el código del repositorio a través de TFS
- Una solución construida muy bien, una solución tenía un proyecto con referencias faltantes (EF, System.Http, como instancia), pero los paquetes nuget relativos se instalaron correctamente.
Todos los números de versión en el proyecto y los paquetes coinciden, haciendo que nuget restore (en todas sus formas) no funcione.
Cómo lo solucioné: simplemente elimine las carpetas del paquete en la raíz de la solución y ejecute la restauración nuget. En este punto, los dlls se descargan correctamente y se pueden agregar para las referencias faltantes.
Debe habilitar la restauración del paquete NuGet en el nivel de solución de VS para que funcione el paquete de restauración faltante.
Intente volver a instalar los paquetes .
En NuGet Package Manager Console, ingrese el siguiente comando:
Update-Package -Reinstall -ProjectName Your.Project.Name
Si desea reinstalar paquetes y restaurar referencias para toda la solución, omita el parámetro -ProjectName
.