Eu tenho uma solução com vários projetos. A maioria das referências de terceiros está ausente, mas há packages.config
arquivos para cada projeto. Como faço para o NuGet instalar / atualizar todos os pacotes necessários? Isso precisa ser feito via linha de comando para cada projeto?
673
Respostas:
Você pode usar o nuget.exe para restaurar seus pacotes ou, com o NuGet 2.7 ou superior instalado, você pode simplesmente compilar sua solução no Visual Studio, que também restaurará os pacotes ausentes.
Para o NuGet.exe, você pode executar o seguinte comando para cada projeto.
Ou com o NuGet 2.7, você pode restaurar todos os pacotes da solução usando a linha de comando.
Ambos irão baixar os pacotes. Seus arquivos de projeto não serão modificados no entanto, ao executar este comando, para que o projeto já tenha uma referência aos pacotes do NuGet. Se não for esse o caso, você poderá usar o Visual Studio para instalar os pacotes.
Com o NuGet 2.7 e superior, o Visual Studio restaurará automaticamente os pacotes NuGet ausentes quando você criar sua solução, para que não seja necessário usar o NuGet.exe.
Para atualizar todos os pacotes em sua solução, primeiro restaure-os e, em seguida, você pode usar o NuGet.exe para atualizar os pacotes ou, no Visual Studio, você pode atualizar os pacotes na janela Console do Gerenciador de Pacotes ou, finalmente, usar o botão Gerenciar. Caixa de diálogo Pacotes.
Na linha de comando, você pode atualizar os pacotes na solução para a versão mais recente disponível em nuget.org.
Observe que isso não executará nenhum script do PowerShell em nenhum pacote do NuGet.
No Visual Studio, você pode usar o Console do Gerenciador de Pacotes para também atualizar os pacotes. Isso tem o benefício de que quaisquer scripts do PowerShell serão executados como parte da atualização, onde o NuGet.exe não os executará. O comando a seguir atualizará todos os pacotes em cada projeto para a versão mais recente disponível em nuget.org.
Você também pode restringir isso a um projeto.
Se você deseja reinstalar os pacotes para as mesmas versões que foram instaladas anteriormente, poderá usar o
-reinstall
argumento com oUpdate-Package
comandoVocê também pode restringir isso a um projeto.
A
-reinstall
opção irá desinstalar primeiro e depois instalar o pacote novamente em um projeto.Ou, você pode atualizar os pacotes usando a
Manage Packages
caixa de diálogo.Atualizações:
-reinstall
fonte
Update-Package -reinstall -Project ProjectName
Reinstale todos os pacotes em TODOS OS PROJETOS da solução atual:
Reinstale todos os pacotes no SPECIFIC PROJECT da solução atual ( Graças a unarity e ashes999 ):
fonte
Há outra maneira, mais nova e mais rápida, de fazer isso no Visual Studio. Confira este post de David Ebbo e faça referência à seção de comentários, se você tiver problemas. Basicamente, você faz o seguinte no prompt do Package Manager:
Posteriormente, quando você criar sua solução, os pacotes serão instalados automaticamente se estiverem ausentes.
Atualizar:
Essa funcionalidade é incorporada ao Nuget 1.6 com integração do visual studio, assim você nem precisa instalar o NuGetPowerTools ou digitar comandos. Tudo o que tem a fazer é
Leia este artigo para mais detalhes.
fonte
Aqui está outra solução se você estiver usando projetos de sites ou não desejar ativar a restauração do Pacote NuGet.
Você pode usar o console do gerenciador de pacotes para enumerar todos os pacotes no arquivo package.config e reinstalá-los.
fonte
$packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
Update-Package -Reinstall
.Este é o melhor e mais fácil exemplo que encontrei. Ele reinstalará todos os nugets listados em packages.config e preservará as versões atuais. Substitua
YourProjectNameGoesHere
pelo nome do projeto.fonte
Com a versão mais recente do NuGet 2.5, agora existe um botão "Atualizar tudo" no gerenciador de pacotes: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
fonte
Estou usando o visual studio 2015 e as soluções fornecidas acima não funcionaram para mim, então fiz o seguinte:
Exclua a pasta packages da minha solução e também as pastas bin e obj de todos os projetos na solução e recompense-a.
Talvez você tenha o próximo erro:
Para resolver isso: Altere esta linha no seu arquivo NuGet.targets e defina-a como true:
Referência: https://stackoverflow.com/a/30918648 e https://stackoverflow.com/a/20502049
fonte
Se você instalar o Nuget 2.8, marque a caixa de seleção
no Visual Studio. Se estiver marcado, simplesmente recrie o projeto restaurará todas as suas bibliotecas de referência.
fonte
Allow NuGet to download missing packages
caixa de seleção.Após 3 horas de busca e investigação.
Eu tive problemas com isso porque temos dois membros da equipe (usando o controle de origem do GitHub), porque não restringimos os arquivos dos pacotes a serem enviados ao repositório remoto, um dos membros da equipe estava enviando pacotes ao servidor e solicitei essas alterações para meu local.
Depois disso, tive o mesmo problema que o PO, também não consegui publicar meu projeto de API no servidor.
No e eu acabei de usar
Update-Package -Reinstall - execute este comando no Package Manager Console
Este comando irá reinstalar todos os seus pacotes que você usou na sua solução. (Para cada projeto)
Reinstale todos os pacotes em TODOS OS PROJETOS da solução atual:
Update-Package -ProjectName 'NameOfProject' -Reinstall - execute este comando no Package Manager Console
Este comando reinstalará todos os seus pacotes relacionados ao projeto que você especificou após "-ProjectName". E acho que isso é melhor porque esperei meia hora para reinstalar todos os pacotes na solução.
Por isso, muito obrigado a Rodolpho Brock .
Além disso, eu recomendaria que, ao extrair alterações do servidor remoto, pressione o botão "Restaurar pacotes" que será mostrado pelo Visual studio.
fonte
Acredito que a primeira coisa que você precisa fazer é ativar o recurso de restauração de pacotes . Veja também aqui . Isso é feito no nível da solução (não do projeto).
Mas isso não vai te levar até o fim: eu encontrei um problema semelhante depois de ativar o recurso de restauração. (VS2013, NuGet 2.8.)
Aconteceu que eu (involuntariamente) comprometi os pacotes no controle de origem quando comprometi o projeto - mas o Visual Studio (e o plug-in de controle de origem) ignorou os binários ao executar o check-in.
O problema surgiu quando eu criei um ramo de lançamento. Minha cópia local da ramificação dev / main / trunk possuía os binários, porque era onde eu havia originalmente instalado / baixado os pacotes.
No entanto, no novo ramo de lançamento,
.nupkg
arquivos do pacote estavam todos lá - então o NuGet não achou que havia algo para restaurar;Excluí todas as pastas do pacote
$(SolutionDir)/packages
(abaixo da ramificação de lançamento) e, em seguida, executei uma reconstrução completa e, dessa vez, a compilação foi bem-sucedida.... e, é claro, voltei e removi as pastas dos pacotes do controle de origem (no tronco e na ramificação de lançamento). Ainda não estou claro se o
repositories.config
arquivo deve ser removido também.Muitos dos componentes instalados para você pelos modelos de projeto - pelo menos para projetos da web - são pacotes NuGet. Ou seja, esse problema não se limita aos pacotes que você adicionou.
Portanto, habilite a restauração do pacote imediatamente após a criação do projeto / solução e, antes de executar um check-in inicial, limpe a
packages
pasta (e certifique-se de confirmar a.nuget
pasta no controle de origem).Isenção de responsabilidade: vi outra resposta aqui no SO que indicava que limpar a
packages
pasta fazia parte da resolução. Isso me colocou no caminho certo, então gostaria de dar crédito ao autor, mas não consigo mais localizar essa pergunta / resposta. Vou postar uma edição se eu me deparar com ela.Eu também observaria que
Update-Package -reinstall
modificará os arquivos.sln
e.csproj
/.vbproj
. Pelo menos foi o que fez no meu caso. Qual IMHO torna essa opção muito menos atraente.fonte
Eu tentei,
Update-Package -reinstall
mas ele falhou em um pacote e parou de processar todos os pacotes restantes de projetos na minha solução.Acabei com meu script que enumera todos os arquivos package.config e é executado
Update-Package -Reinstall -ProjectName prj -Id pkg
para cada projeto / pacote.Espero que possa ser útil para alguém:
Edit: Este é um erro que eu tive: Update-Package: Não foi possível encontrar o pacote 'EntityFramework.BulkInsert-ef6'. Pacotes existentes devem ser restaurados antes de executar uma instalação ou atualização. A execução manual
Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6
funcionou muito bem.fonte
Para aqueles que chegam aqui devido ao servidor de compilação estar em falta, é possível criar um destino MSBuild executando o comando exec para executar o comando nuget restore , como abaixo (neste caso, nuget.exe está na pasta .nuget, em vez de em o caminho), que pode ser executado em uma etapa de criação do TeamCity imediatamente antes da criação da solução
fonte
agora, o Console do Nuget Package Manager no Visual Studio 2012 fornece um botão "Restaurar" automaticamente assim que ele encontra qualquer pacote não instalado, mas lá em package.config. Característica impressionante!
fonte
No VS2012 V11, se eu usar "-Reinstall" no final da linha, ele não funcionará.
Então, eu simplesmente usei:
fonte
Eu sei que este é um post antigo, mas achei que isso poderia ser útil. Se você precisar ignorar pacotes específicos durante o processo de atualização (como qualquer pacote que atualize referências a JavaScript), use o seguinte script do PowerShell (verifique se a fonte do pacote está definida como "Tudo" no console do gerenciador de pacotes):
EDIT 25-09-2014 10:55 EST - Corrigido um bug no script
fonte
No Visual Studio 2017 - Quando você compila usando o IDE - Ele baixa todos os pacotes de nuget ausentes e salva na pasta "packages".
Mas na compilação da máquina de compilação foi feita usando o msbuild.exe. Nesse caso, baixei o nuget.exe.
Durante cada processo de compilação, antes de executar o msbuild.exe. Ele executará -> nuget.exe restore NAME_OF_SLN_File (se houver apenas um arquivo .SLN, você poderá ignorar esse parâmetro).
fonte
MSbuild -t:restore Xxxx.sln
Não sei desde quando, mas no VS2019 você pode fazer isso de uma maneira mais fácil:
fonte