Como faço para que o NuGet instale/actualize todos os pacotes nos pacotes.config?

Tenho uma solução com vários projectos. A maioria das referências de terceiros estão em falta, mas existem arquivos packages.config para cada projeto. Como faço para que o NuGet instale / actualize todos os pacotes necessários? Isto tem de ser feito através da linha de comandos para cada projecto?

 564
Author: Anthony Mastrean, 2011-07-29

15 answers

Pode utilizar nuget.exe para restaurar os seus pacotes ou com o NuGet 2.7, ou acima, pode simplesmente compilar a sua solução no Visual Studio, que também irá restaurar os pacotes em falta.

Para NuGet.exe você pode executar o seguinte comando para cada projeto.

nuget install packages.config

Ou com NuGet 2. 7 pode repor todos os pacotes na solução usando a linha de comandos.

nuget restore YourSolution.sln
Ambos vão retirar os pacotes. Os seus ficheiros de projecto Irão não ser modificado no entanto ao executar este comando, pelo que o projecto já deverá ter uma referência aos pacotes NuGet. Se este não for o caso, então você pode usar o Visual Studio para instalar os pacotes.

Com o NuGet 2.7 e acima, o Visual Studio irá restaurar automaticamente os pacotes NuGet em falta quando construir a sua solução para que não haja necessidade de usar o NuGet.exe.

Para actualizar todos os pacotes da sua solução, primeiro restaure-os, e depois pode usar o NuGet.exe a actualizar os pacotes ou de dentro do Visual Studio você pode atualizar os pacotes a partir da janela da consola do Gestor de pacotes, ou, finalmente, você pode usar a janela de gestão de pacotes.

A partir da linha de comandos, poderá actualizar os pacotes na solução para a última versão disponível a partir de nuget.org.

nuget update YourSolution.sln

Lembre-se que isto não irá executar nenhum programa PowerShell em nenhum pacote NuGet.

De dentro do Visual Studio pode usar a consola do Gestor de pacotes para também actualizar os pacotes. Isto tem o benefício de que qualquer scripts PowerShell será executado como parte da atualização onde como usando NuGet.o exe não os vai gerir. O seguinte comando irá actualizar todos os pacotes em cada projecto para a última versão disponível a partir de nuget.org.

Update-Package
Também pode restringir isto a um projecto.
Update-Package -Project YourProjectName

Se quiser reinstalar os pacotes para as mesmas versões que foram instaladas anteriormente, então poderá usar o argumento -reinstall com o comando Update-Package.

Update-Package -reinstall

Podes também restrinja isso a um projeto.

Update-Package -reinstall -Project YourProjectName

A opção -reinstall irá primeiro desinstalar e, em seguida, instalar o pacote novamente em um projeto.

Ou, poderá actualizar os pacotes com a janela Manage Packages.

Actualizações:

  • 2013/07/10 - actualizado com informações sobre a recuperação do nuget em NuGet 2. 7
  • 2014/07/06 - Atualizado com informações sobre restauração automática de pacotes no Visual Studio e trouxe a resposta actualizado com outras alterações ao NuGet.
  • 2014/11/21 - actualizado com informações sobre -reinstall
 709
Author: Matt Ward, 2017-03-29 13:38:42

Reinstale todos os pacotes em todos os projectos da solução actual:

Update-Package -Reinstall

Reinstalar todos os pacotes no projecto específico da solução actual (graças à unaridade e ashes999):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
 450
Author: Rodolpho Brock, 2014-01-24 17:24:40
Há outra forma mais recente e rápida de fazer isto a partir do Visual Studio. Confira Este post por David Ebbo, e consulte a secção de comentários se tiver problemas. Basicamente, você faz o seguinte na linha de comandos do Gestor de Pacotes:
PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

Depois, quando construir a sua solução, os pacotes serão automaticamente instalados se estiverem em falta.

Actualizar:

Esta funcionalidade está incorporada em Nuget 1.6 com visual studio integração de modo que você nem precisa instalar NuGetPowerTools ou digitar comandos. Tudo o que tens de fazer é

Carregue com o botão direito no nó de solução do Explorer e seleccione Activar A Reposição Do Pacote NuGet.

LeiaEste artigo para mais detalhes.

 164
Author: Alex, 2011-12-31 22:38:28

Aqui está outra solução se você está usando projetos do site, ou não quer ativar a restauração do pacote NuGet.

Pode usar a consola do Gestor de pacotes para enumerar todos os pacotes do pacote.ficheiro de configuração e reinstalá-los.

# read the packages.config file into an XML object
[xml]$packages = gc packages.config

# install each package 
$packages.packages.package | % { Install-Package -id $($_.id) -Version $($_.version) }
 18
Author: David Martin, 2013-02-01 09:49:03
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
Este é o melhor e mais fácil exemplo que encontrei. Ele irá reinstalar todos os nugets que estão listados em pacotes.configuração e irá preservar as versões actuais. Substituir YourProjectNameGoesHere pelo nome do projecto.
 14
Author: unarity, 2013-11-03 03:59:16

Com a versão mais recente do NuGet 2.5, existe agora um botão "Actualizar tudo" no Gestor de pacotes: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once

 10
Author: Erik Schierboom, 2013-06-12 17:06:14
Estou a usar o visual studio 2015 e as soluções acima apresentadas não funcionaram para mim, por isso fiz o seguinte:

Apague a pasta de pacotes da minha solução e também as pastas bin e obj de cada projecto da solução e dê-lhe uma reconstrução.

Talvez tenhas o próximo erro:

Incapaz de localizar o nuget.exe

Para resolver isto, mude esta linha no seu NuGet.meta o ficheiro e defina-o para verdadeiro:
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Referência:https://stackoverflow.com/a/30918648 e https://stackoverflow.com/a/20502049

 6
Author: mejiamanuel57, 2017-05-23 11:47:30
Depois de 3 horas de pesquisa e investigação.

Tive problemas com isso porque temos dois membros na equipe (usando o Sistema de controle de origem), porque nós não restringir ficheiros para pacotes para enviar para repositório remoto, um dos membros da equipe foi de enviar pacotes para o servidor e eu tenho que puxar as alterações para o meu local.

Depois disso, tive o mesmo problema que o PO, e também não fui capaz de publicar o meu projecto API no servidor.

At the and I have just used

Update-Package-Reinstall - execute este comando na consola do Gestor de Pacotes

Este comando irá reinstalar todos os seus pacotes que tenha usado na sua solução. (Para cada projecto)

Reinstale todos os pacotes em todos os projectos da solução actual:

Update-Package-ProjectName 'NameOfProject' - Reinstall - execute este comando na consola do Gestor de Pacotes

Este comando irá reinstalar todos os seus pacotes que estão relacionados com projecto que indicou após "- ProjectName". E eu acho que isso é melhor porque eu tinha esperado por meia hora para reinstalar todos os pacotes em solução.

Por isto muito obrigado a Rodolpho Brock .

Além disso, eu recomendaria que quando você puxar as alterações do servidor remoto, para carregar no botão "Restaurar pacotes" que será mostrado pelo Visual studio.

 4
Author: Nihad Delic, 2017-08-30 14:16:08

Eu acredito que a primeira coisa que você precisa fazer é activar a funcionalidade de restauração do pacote . Veja também aqui. Isto é feito ao nível da solução (não do projeto).

[[11]} Mas isso não vai te levar até o fim -- eu encontrei um problema semelhante depois de ter ativado a funcionalidade de restauração. (VS2013, NuGet 2.8.)

Acontece que eu tinha (sem intenção) comprometido os pacotes para o controle de origem quando eu cometi o projeto -- mas Visual Studio (e a fonte plugin de controlo) tinha ignorado de forma útil os binários ao efectuar o check-in.

O problema surgiu quando criei um ramo de lançamento. A minha cópia local do ramo dev/main/trunk tinha os binários, porque foi aí que instalei/transferi originalmente os pacotes.
No entanto, no novo ramo de lançamento,
  • as pastas de pacotes e os ficheiros .nupkg estavam lá todos -- por isso o NuGet não pensou que houvesse alguma coisa para restaurar;
  • Mas ao mesmo tempo, nenhum dos DLLs estavam presentes -- ou seja, as referências de terceiros estavam faltando -- então eu não pude construir.

Apaguei todas as pastas de pacotes em $(SolutionDir)/packages (sob o ramo de lançamento) e depois corri uma reconstrução completa, e desta vez a compilação foi bem sucedida.
... e então, é claro, eu voltei e removi as pastas de pacotes do controle de origem (no tronco e ramo de liberação). Não estou claro (ainda) se o arquivo repositories.config deve ser removido também.

Muitos dos componentes instalados para si pelos modelos do projecto -- pelo menos para os projectos web -- são pacotes NuGet. Isto é, esta edição não se limita aos pacotes que você adicionou.
Por isso, active a reposição do pacote imediatamente após a criação do projecto/solução, e antes de efectuar um check-in inicial, limpe a pasta packages (e certifique-se que envia a pasta .nuget para o controlo de origem).

Disclaimer: eu vi outra resposta aqui sobre o que indicou que limpar a pasta packages era parte da resolução. Que me pôs o caminho certo, então eu gostaria de dar crédito ao autor, mas eu não posso mais localizar essa pergunta / resposta. Vou publicar uma edição se tropeçar nela.

Eu também notaria que {[6] } irá modificar o .sln e .csproj/.vbproj ficheiros. Pelo menos foi o que fez no meu caso. O que o IMHO torna esta opção muito menos atraente.

 3
Author: David, 2015-05-06 20:38:13

Para os que chegam aqui devido à falta do servidor de compilação, poderá criar um alvo MSBuild que execute o comando exec para executar o comando NuGet restore, como em baixo (neste caso, o nuget.a exe está no .pasta nuget, em vez de no caminho), que pode então ser executado em um passo de compilação TeamCity imediatamente antes de construir a solução

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>
 2
Author: Fetchez la vache, 2016-04-13 08:53:19

Se instalar o Nuget 2. 8, assinale a opção

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build
Em Estúdio Visual. Se estiver assinalado, então simplesmente reconstrua o projecto irá restaurar todas as suas bibliotecas de referência.
 2
Author: Yevgraf Andreyevich Zhivago, 2017-07-07 08:47:48

Agora a consola do Gestor de Pacotes Nuget no Visual Studio 2012 dá-lhe um botão "restaurar" automaticamente assim que encontrar qualquer pacote não instalado, mas lá dentro no Pacote.configuracao. Grande Característica!

 1
Author: Sunny Sharma, 2014-01-14 09:48:09

Em VS2012 V11, se eu usar "- Reinstall " no final da linha, não funciona.

Então eu simplesmente usei:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'
 1
Author: user3516584, 2014-05-17 15:47:29
Sei que este é um post antigo, mas achei que podia ser útil. Se tiver necessidade de ignorar pacotes específicos durante o processo de actualização( como quaisquer pacotes que actualizem as referências do JavaScript), use o seguinte script PowerShell (certifique-se que a sua fonte de pacotes está configurada como "All" na consola do Gestor de Pacotes):

EDIT 2014-09-25 10: 55 AM EST - Fixed a bug in the script

$packagePath = "packages.config"
$projectName = "MyProjectName"

$packagesToIgnore = @(
    "bootstrap",
    "jQuery",
    "jquery-globalize",
    "jquery.mobile",
    "jQuery.jqGrid",
    "jQuery.UI.Combined",
    "jQuery.Validation",
    "Microsoft.jQuery.Unobtrusive.Validation",
    "Modernizr",
    "Moment.js"
)

[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}

$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }
 1
Author: Joe The Coder, 2014-09-25 14:55:51

No Visual Studio 2017 - quando você compilar usando o IDE - ele irá baixar todos os pacotes NuGet em falta e gravar na pasta "Pacotes".

Mas na compilação da máquina de compilação foi feito usando msbuild.exe. Nesse caso, baixei o nuget.exe.

Durante cada processo de compilação antes de executar o msbuild.exe. Ele irá executar - > nuget.exe repor o Nome_ Of_ Sln_ file (se existir apenas um .Arquivo SLN então você pode ignorar esse parâmetro).

 0
Author: David, 2018-03-27 16:00:40