trends - Como obtenho o NuGet para instalar/atualizar todos os pacotes no packages.config?




nuget trends (11)

Após 3 horas de pesquisa e investigação.

Eu tive problemas com isso porque nós temos dois membros em equipe (usando o controle de origem do GitHub), porque nós não restringimos os arquivos para pacotes para envio ao repositório remoto, um dos membros da equipe enviou pacotes para o servidor e eu puxei as mudanças para meu local.

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

Na e eu acabei de usar

Update-Package -Reinstall - execute este comando no Console do Gerenciador de Pacotes

Este comando irá reinstalar todos os seus pacotes que você usou em sua solução. (Para cada projeto)

Reinstale todos os pacotes em TODOS OS PROJETOS da solução atual:

Update-Package -ProjectName 'NameOfProject' -Reinstall - executa este comando no Console do Gerenciador de Pacotes

Este comando irá reinstalar todos os seus pacotes relacionados ao projeto que você especificou após "-ProjectName". E eu acho que isso é melhor porque eu tinha que esperar por meia hora para reinstalar todos os pacotes em solução.

Por isso muito obrigado a .

Além disso, eu recomendo que, quando você puxar as alterações do servidor remoto, pressione o botão "Restaurar pacotes" que será exibido pelo Visual Studio.

Eu tenho uma solução com vários projetos nela. A maioria das referências de terceiros está faltando, mas existem arquivos packages.config para cada projeto. Como obtenho o NuGet para instalar / atualizar todos os pacotes necessários? Isso precisa ser feito via linha de comando para cada projeto?


Aqui está outra solução se você estiver usando projetos de sites ou não quiser 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.

# 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) }

Estou usando o visual studio 2015 e as soluções dadas acima não funcionaram para mim, então eu fiz o seguinte:

Exclua a pasta packages da minha solução e também as pastas bin e obj de todos os projetos da solução e conceda a ela uma reconstrução.

Talvez você tenha o próximo erro:

Incapaz de localizar nuget.exe

Para resolver isso: Altere esta linha no seu arquivo NuGet.targets e defina-a para true:

<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

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


Eu acredito que a primeira coisa que você precisa fazer é ativar o recurso de restauração de pacotes . Veja também here . Isso é feito no nível da solução (não do projeto).

Mas isso não vai te levar até o fim - eu me deparei com um problema semelhante depois de ter ativado o recurso de restauração. (VS2013, NuGet 2.8)

Descobri que eu tinha (inadvertidamente) cometido os pacotes para controle de origem quando eu cometi o projeto - mas o Visual Studio (e o plugin de controle de origem) tinha prestativamente ignorado os binários ao realizar o check-in.

O problema surgiu quando criei um branch de release. Minha cópia local do ramo dev / main / trunk tinha os binários, porque é onde eu originalmente instalei / baixei os pacotes.
No entanto, no novo ramo de lançamento,

  • as pastas do pacote e .nupkg arquivos .nupkg estavam todos lá - então o NuGet não achou que havia algo para restaurar;
  • mas, ao mesmo tempo, nenhuma das DLLs estava presente - ou seja, as referências de terceiros estavam faltando - então não consegui criar.

Excluí todas as pastas de pacotes em $(SolutionDir)/packages (no ramo de lançamento) e, em seguida, executei uma reconstrução completa e, desta vez, a compilação foi bem-sucedida.
... e depois, claro, voltei e removi as pastas de pacotes do controle de origem (no tronco e na ramificação de lançamento). Eu não estou claro (ainda) se o arquivo repositories.config deve ser removido.

Muitos dos componentes instalados para você pelos modelos de projeto - pelo menos para projetos da web - são pacotes do NuGet. Ou seja, esse problema não está limitado aos pacotes que você adicionou.
Portanto, ative a restauração do pacote imediatamente após a criação do projeto / solução e, antes de executar uma entrada inicial, limpe a pasta packages (e certifique-se de confirmar a pasta .nuget no controle de origem).

Disclaimer: Eu vi outra resposta aqui no SO que indicava que a limpeza da pasta de packages fazia parte da resolução. Isso me colocou no caminho certo, então eu 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 isso.

Eu também Update-Package -reinstall que o Update-Package -reinstall modificará os arquivos .sln e .vbproj / .vbproj . Pelo menos foi o que aconteceu no meu caso. Qual IMHO torna esta opção muito menos atraente.


Eu tentei Update-Package -reinstall mas ele falha 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 execute Update-Package -Reinstall -ProjectName prj -Id pkg para cada projeto / pacote.

Espero que possa ser útil para alguém:

$files = Get-ChildItem -Recurse -Include packages.config;

[array]$projectPackages = @();
$files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } }

$projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }

Edit: Este é um erro que eu tive: Update-Package: Não é possível encontrar o pacote 'EntityFramework.BulkInsert-ef6'. Os pacotes existentes devem ser restaurados antes de executar uma instalação ou atualização. Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 manual do Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 funcionou muito bem.


Há outra maneira, mais recente 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 Gerenciador de pacotes:

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

Depois, quando você construir sua solução, os pacotes serão instalados automaticamente se estiverem faltando.

Atualizar:

Esta funcionalidade está integrada no Nuget 1.6 com a integração visual do studio, pelo que não é necessário instalar o NuGetPowerTools nem digitar comandos. Tudo o que tem a fazer é

Clique com o botão direito do mouse no nó Solution no Solution Explorer e selecione Enable NuGet Package Restore.

Leia este artigo para mais detalhes.


No Visual Studio 2017 - Quando você compila usando o IDE - Ele irá baixar todos os pacotes nuget que estão faltando e salvar na pasta "packages".

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

Durante cada processo de compilação antes de executar msbuild.exe. Ele irá executar -> nuget.exe restaurar NAME_OF_SLN_File (se houver apenas um arquivo .SLN, então você pode ignorar esse parâmetro).


Para aqueles que chegam aqui devido à falha do servidor de compilação, você pode criar um destino do MSBuild executando o comando exec para executar o comando nuget restore , conforme abaixo (neste caso, nuget.exe está na pasta .nuget, em vez de em o caminho), que pode ser executado em uma etapa de compilação do TeamCity imediatamente antes de construir a solução

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

Se você instalar o Nuget 2.8, marque a caixa de seleção

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

no Visual Studio. Se estiver marcado, basta recriar o projeto para restaurar todas as suas bibliotecas de referência.


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 NuGet.exe você pode executar o seguinte comando para cada projeto.

nuget install packages.config

Ou com o NuGet 2.7, você pode restaurar todos os pacotes na solução usando a linha de comando.

nuget restore YourSolution.sln

Ambos vão derrubar 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 esse não for o caso, você poderá usar o Visual Studio para instalar os pacotes.

Com o NuGet 2.7, e acima, o Visual Studio restaurará automaticamente os pacotes NuGet ausentes quando você criar sua solução, para que não haja necessidade de 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, atualizar os pacotes na janela do Console do Gerenciador de Pacotes ou, finalmente, usar o Gerenciar Caixa de diálogo de pacotes.

A partir da linha de comando, você pode atualizar os pacotes da solução para a versão mais recente disponível no site nuget.org.

nuget update YourSolution.sln

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 atualizar também os pacotes. Isso tem o benefício de que quaisquer scripts do PowerShell serão executados como parte da atualização, na medida em que o uso do NuGet.exe não os executará. O comando a seguir atualizará todos os pacotes em todos os projetos para a versão mais recente disponível no site nuget.org.

Update-Package

Você também pode restringir isso a um projeto.

Update-Package -Project YourProjectName

Se você quiser reinstalar os pacotes nas mesmas versões instaladas anteriormente, poderá usar o argumento -reinstall com o comando Update-Package .

Update-Package -reinstall

Você também pode restringir isso a um projeto.

Update-Package -reinstall -Project YourProjectName

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

Ou você pode atualizar os pacotes usando o diálogo Manage Packages .

Atualizações:

  • 2013/07/10 - Atualizado com informações sobre a restauração do nuget no NuGet 2.7
  • 2014/07/06 - Atualizado com informações sobre a restauração automática de pacotes no Visual Studio e atualizou a resposta com outras alterações no NuGet.
  • 2014/11/21 - Atualizado com informações sobre -reinstall

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

Este é o melhor e mais fácil exemplo que encontrei. Ele irá reinstalar todos os nugets listados em packages.config e preservará as versões atuais. Substitua YourProjectNameGoesHere com o nome do projeto.