A restauração do pacote NuGet não está funcionando


165

Fiz o check-in de um projeto em um computador, o check-out em outro e descobri que os binários instalados pelo NuGet estão ausentes. Eu poderia fazer check-los também no controle de origem, mas parece que há uma solução melhor:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Eu segui essas instruções, agora tenho uma .nugetpasta onde deveria estar e tenho as seguintes entradas no meu arquivo .csproj:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

e ainda assim, quando reconstruo minha solução, os pacotes ausentes não são restaurados.

o que estou perdendo? Como posso diagnosticar esse problema?


Você vê o nuget.exe sendo acionado no log de saída?
Pranav

E o mais importante: você está vendo algum erro no log de saída?
Maartenba 20/03/12

Respostas:


272

Observe que você pode forçar a restauração do pacote para executar executando os seguintes comandos no console do gerenciador de pacotes nuget

Update-Package -Reinstall

Força a reinstalação de tudo na solução.


Update-Package -Reinstall -ProjectName myProj

Força a reinstalação de tudo no projeto myProj.

Nota : Esta é a opção nuclear. Ao usar este comando, você pode não obter as mesmas versões dos pacotes que você instalou e isso pode levar a problemas. É menos provável que isso ocorra no nível do projeto, em oposição ao nível da solução.

Você pode usar a -safeopção de parâmetro de linha de comando para restringir atualizações para versões mais recentes com o mesmo componente de versão principal e secundária. Esta opção foi adicionada mais tarde e resolve alguns dos problemas mencionados nos comentários.

Update-Package -Reinstall -Safe


7
@ NightOwl888 que soa como algo que precisa ser relatado para nuget, pois não deveria haver maneira de fazer isso, a menos que talvez você realmente sempre tenha problemas de ligação infernal com DLL e por sorte estava funcionando, mas a reinstalação acabou com sua sorte.
Chris Marisic

4
@ nightowl se você estiver usando o controle de origem, não deve ser tão difícil fazer o backup das alterações.
ErikE

4
A principal desvantagem aqui é que as versões do pacote não são mantidas, portanto a versão mais recente do pacote será instalada. Isso pode ser um problema se o seu projecto não é compatível com a nova versão ..
JDandChips

4
Sim, o Update-Package -Reinstall funcionou para mim. Não faço ideia por que o IDE simplesmente não faz isso. Tudo está definido corretamente. Ughgh, eu juro, o NuGet é bom e irritante.
Jeremy Ray Brown

2
É muito gentil da sua parte adicionar o "importante! isso pode destruir seu projeto" na parte inferior da sua resposta!
Devman 17/08

25

Para outras pessoas que se deparam com este post, leia isto.

O NuGet 2.7+ nos apresentou a Restauração automática de pacotes . Essa é uma abordagem muito melhor para a maioria dos aplicativos, pois não adultera o processo do MSBuild. Menos dores de cabeça.

Alguns links para você começar:


2
Obrigado por uma resposta apropriada à versão atual do NuGet.
Eric J.

20

Você precisa escolher uma das seguintes maneiras:

Reinstalar um pacote por seu nome em todos os projetos da solução:

Update-Package –reinstall <packageName>

Reinstalando um pacote por seu nome e ignorando suas dependências em todos os projetos da solução:

Update-Package –reinstall <packageName> -ignoreDependencies

Reinstalando um pacote por seu nome em um projeto:

Update-Package –reinstall <packageName> <projectName>

Reinstalando todos os pacotes em um projeto específico:

Update-Package -reinstall -ProjectName <projectName>

Reinstalando todos os pacotes em uma solução:

Update-Package -reinstall 

Resolvi meu problema com estilo rápido e sujo.
21417 Blackorchid

20

Você ativou o modo de restauração de pacotes no projeto que possui os pacotes / binários ausentes? Há um problema conhecido que requer que os pacotes sejam instalados corretamente ao ativar o modo de restauração:

http://nuget.codeplex.com/workitem/1879


O link original está morto; isso pode ser um substituto: https://github.com/NuGet/Home/issues/1968


3
Obrigado pelo link. Ativar o modo de restauração de pacotes em um projeto que possui os pacotes / binários ausentes será um caso comum. Se você não possui os pacotes, é quando você os deseja. Falha no caso de uso.
Anthony

2
Quando você diz "ativar o modo de restauração de pacotes no projeto que possui os pacotes ausentes", o que você quer dizer? Existe um comando do console que eu preciso executar para fazer isso?
precisa

90
O NuGet me falha diariamente, eu o desprezo totalmente.
Jammer

14

VS 2017

Ferramentas> Gerenciador de Pacotes NuGet> Configurações do Gerenciador de Pacotes> Geral Clique em "Limpar todos os cache do NuGet"


Ao verificar uma solução fora do controle de origem (gerenciada usando o Visual Studio Team Explorer com DevOps / Git), as compilações não foram possíveis devido à falta de referências e os pacotes de restauração não fizeram nada. Esta solução foi a correta para esta circunstância.
PJRobot

12

Eu encontrei esse problema em dois cenários.

Primeiro, quando tento criar minha solução na linha de comando usando o msbuild.exe. Em segundo lugar, quando tento criar o sln e os projetos que contêm no meu servidor de build usando TFS e CI.

Eu recebo erros alegando que faltam referências. Ao inspecionar o meu diretório de compilação local e o do servidor TFS, vejo que a pasta / packages não é criada e os pacotes de nuget não são copiados. Seguir as instruções listadas na resposta de Alexandre http://nuget.codeplex.com/workitem/1879 também não funcionou para mim.

Ativei o Restore Packages via VS2010 e vi as compilações funcionarem somente no VS2010. Minha solução alternativa é provavelmente totalmente inválida, mas, para o meu ambiente, tudo funcionou a partir de uma construção de linha de comando localmente, bem como de uma construção de IC no TFS.

Entrei em. \ Nuget e alterei esta linha no arquivo .nuget \ NuGet.targets:

de:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

para: (observe, sem as aspas ao redor das variáveis)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

Entendo que se meus diretórios tiverem espaços neles, isso falhará, mas não tenho espaços nos diretórios e, portanto, essa solução alternativa fez com que minhas compilações fossem concluídas com êxito ... por enquanto.

Eu direi que ativar o log de nível de diagnóstico em sua compilação ajudará a mostrar quais comandos estão sendo executados pelo msbuild. Foi isso que me levou a invadir temporariamente o arquivo de destinos.


Eu tive o problema com aspas duplas e tive que fazer a mesma edição que você. Muito frustrante!
Greg

5

Se alguma outra coisa não funcionar, tente:

  1. Feche o projeto.
  2. Exclua a pasta packages na sua pasta da solução.
  3. Abra o Project novamente e restaure Nugget Packages novamente.

Trabalhou para mim e é fácil tentar.


2
Isso funcionou para mim. Na etapa 3, não precisei restaurar manualmente os pacotes - eles foram restaurados automaticamente quando eu abri o projeto.
Tawab Wakil

5

Se nenhuma das outras respostas funcionar para você, tente o seguinte, que foi a única coisa que funcionou para mim:

Encontre seu .csprojarquivo e edite-o em um editor de texto.

Encontre a <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">tag no seu .csprojarquivo e exclua todo o bloco.

Reinstale todos os pacotes na solução:

Update-Package -reinstall

Depois disso, seus pacotes de nuget devem ser restaurados, acho que esse pode ser um caso que ocorre apenas quando você move seu projeto para um local diferente.


Isso me salvou de ficar completamente louco. Obrigado!
Jeff Hay

4

Apenas para outras pessoas que podem ter esse problema, consegui resolver o problema fechando o Visual Studio e reabrindo o projeto. Quando o projeto foi carregado, os pacotes foram restaurados durante a fase de inicialização.


4

Para mim, eu tinha uma tag vazia NuGetPackageImportStamp em .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

Idealmente, deve conter algum GUID válido.

Remover a tag acima mencionada e "Restaurar pepitas" funcionou para mim.


1

Às vezes, algo estranho acontece e o uso do Visual Studio para restaurar automaticamente não funciona. Nesse caso, você pode usar o Console do NuGet Package Manager. Isso é aberto no Visual Studio em Ferramentas -> Gerenciador de Pacotes NuGet -> Console do Gerenciador de Pacotes . Os comandos no console são simples. E para obter ajuda de contexto ao digitar um comando, basta pressionar o botão e ele fornecerá todas as opções que começam com as letras que você está digitando. Portanto, se um pacote não estiver instalado, por exemplo log4net, digite o seguinte comando:

Pacote de instalação log4net

Você pode fazer muito mais, como especificar a versão para instalar, atualizar um pacote, desinstalar um pacote etc.

Eu tive que usar o console para me ajudar quando o Visual Studio estava agindo como uma esquisita.


1

A Restauração automática de pacotes falhará por um dos seguintes motivos:

  1. Você não removeu os arquivos NuGet.exe e NuGet.targets da pasta .nuget da solução (que pode ser encontrada na pasta raiz da solução)
  2. Você não ativou a restauração automática de pacotes nas ferramentas >> Opções >> Nuget Package Manager >> Configurações gerais.
  3. Você esqueceu de remover manualmente as referências em todos os seus projetos para o arquivo Nuget.targets
  4. Você precisa reiniciar o Visual Studio (verifique se o processo foi eliminado do gerenciador de tarefas antes de iniciar novamente).

O artigo a seguir descreve mais detalhadamente como executar os pontos 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
Com relação ao seu ponto 1, o link que você fornece contradiz seus conselhos: "Se você estiver usando o TFS 1. Remova os arquivos NuGet.exe e NuGet.targets da pasta .nuget da solução. 2. Guarde o arquivo NuGet.Config para continuar ignorando. adicionando pacotes ao controle de origem ".
Andrew Dennison

1

Eu tive os pacotes do NuGet quebrando depois que fiz uma Restauração do Sistema no meu sistema, fazendo o backup cerca de dois dias. (Os pacotes do NuGet foram instalados nesse meio tempo.) Para corrigi-lo, tive que ir para a pasta .nuget \ packages no meu perfil de usuário, encontrar os pacotes e excluí-los. Somente então o Visual Studio puxaria os pacotes para baixo e os adicionaria corretamente como referências.


1

A melhor solução alternativa que encontrei ao criar um novo projeto do zero e depois importe todos os arquivos de origem com o código. Meu projeto não era tão complicado, então não tive nenhum problema a partir daí.


1

Nenhuma das outras soluções funcionou na minha situação:

As dependências do AspNetCore foram instaladas / desinstaladas e estavam sendo armazenadas em cache. 'AspNetCore.All' se recusaria a atualizar / reinstalar / remover corretamente. E, independentemente do que eu fiz, ele usaria as dependências em cache (com as quais não era compatível), porque eram uma versão superior.

  1. Faça backup de tudo. Observe a lista de dependências que você precisará reinstalar. Saia do VisualStudio
  2. Abra todos os arquivos .proj em um editor de texto e remova todos PackageReference
  3. Em cada projeto, exclua as pastas bin,obj
  4. Exclua as pastas "pacotes" encontradas na solução.
  5. Solução aberta, entre Tools > Nuget Package Manager > Package Manager Settingse Clear all Nuget caches. Verifique o console, pois pode falhar na remoção de alguns itens - copie o caminho da pasta e saia do visual studio.
  6. Exclua qualquer coisa dessa pasta Reabra a solução e comece a instalar os pacotes de nuget novamente do zero.

Se isso ainda não funcionar, repita, mas também procure sua unidade no Windows Explorer nugete exclua tudo que estiver em cache.


0

vs2015 nenhum problema de restauração de nuget de ativação. Minha solução:

  1. adicione a pasta .nuget, adicione o arquivo NuGet.Config e NuGet.targets no diretório .nuget

  2. cada arquivo de projeto inclui: build

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Esta é a maneira antiga de fazê-lo. Veja a resposta @davenewza e seu link para blog.davidebbo.com/2014/01/…
timB33

0

Se o erro que você está enfrentando for "incapaz de conectar-se ao servidor remoto" como foi o meu, será benéfico que você faça essa verificação, além das verificações fornecidas nos comentários acima.

Vi que havia duas fontes de pacotes NUGET das quais os pacotes podiam ser baixados (em Ferramentas-> Gerenciador de Pacotes Nuget-> Configurações do Gerenciador de Pacotes). Uma das fontes do pacote não estava funcionando e o Nuget estava tentando fazer o download apenas dessa fonte.

As coisas se encaixaram quando eu mudei a fonte do pacote para fazer o download em: https://www.nuget.org/api/v2/ EXPLICITAMENTE nas configurações


0

No meu caso, uma tentativa de restauração do Nuget interrompida havia corrompido um dos packages.configarquivos da solução. Eu não descobri isso antes de verificar minha árvore de trabalho do git. Após reverter as alterações no arquivo, a restauração do Nuget estava funcionando novamente.


0

Há um atalho para fazer a restauração do Nuget funcionar: 1. Verifique se a conexão com a Internet ou os URLs do Nuget são adequados no menu de opções do VS Tools 2. Observe a pasta .nuget ou nuget na solução; caso contrário, copie de qualquer um para obter o nuget.exe

  1. EXCLUIR pastas de pacotes, se existir

  2. Abra o console do gerenciador de pacotes, execute este comando

    • cole o caminho completo do nuget.exe RESTORE o caminho completo do arquivo .sln!
  3. use o comando Install-pacakge, se a construção não for concluída para nenhuma referência ausente. Espero que ajude (HIH)

0

No VS2017, clique com o botão direito do mouse na solução => Abrir CommandLine => Linha de Comando do Desenvolvedor.

Quando estiver aberto, digite (e pressione enter depois)

dotnet restore

Isso restaurará todos / todos os pacotes e você obterá uma boa saída do console do que foi feito ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.