Existe uma maneira de atualizar automaticamente o nuget.exe na pasta .nuget ao usar a restauração de pacote?

92

Minha equipe tem usado a opção Ativar restauração de pacote desde o Nuget 1.5 para manter os pacotes fora de nosso controle de origem. Quando o Nuget 1.6 foi lançado, percebemos um problema em que ele não estava puxando os pacotes para baixo e rastreamos até o Nuget.exe na pasta .nuget que precisava ser atualizado para 1.6 para corresponder ao Gerenciador de pacotes.

Qual é a melhor maneira de atualizar uma solução depois que o Nuget for atualizado? Não vejo uma maneira fácil do estúdio dizer qual versão do nuget está na pasta da solução. Até agora, eliminamos a pasta .nuget e executamos novamente o comando Enable Package Restore.

Rick
fonte

Respostas:

148

Eu sugeriria atualizar .nuget \ nuget.exe com este comando da linha de comando:

nuget.exe update -self

[EDIT]: Feche a solução VS primeiro. Se houver uma atualização e a solução for aberta, o nuget.exe será removido da solução.

Você pode atualizar automaticamente o nuget.exe na restauração, modificando o .nuget \ nuget.targets para adicionar o comando acima. Eu veria o comando de restauração lá como exemplo. Mas não tenho certeza se vale a pena, pois as atualizações do nuget.exe não são tão comuns e a compatibilidade com versões anteriores deve falhar muito raramente.

Alexandre Dion
fonte
Eu tentei isso em um de meus projetos. Ele atualizou o NuGet.exe, mas parecia tê-lo removido da minha solução. Eu sei que posso adicioná-lo de volta, mas parecia estranho.
Rick
Certo, eu tentei uma atualização real desta vez e nuget.exe foi removido da solução VS para mim também. (Não entendi isso antes, pois o nuget.exe estava atualizado). Isso acontece porque, durante a atualização, o nuget.exe atual é movido para nuget.exe.old primeiro, de modo que a referência do arquivo é interrompida. Duvido que isso seja corrigido, eu executaria o comando com a solução fechada.
Alexandre Dion
Parece que fazer a autoatualização não geraria um novo arquivo NuGet.targets, o que pode ser um problema. Acho que a equipe do NuGet fez algumas alterações no arquivo de destino entre as versões 1.6 e 1.7.
William Gross
@William Gross bem, você poderia verificar se houve uma atualização para nuget.org/packages/NuGet.Build (esse é o pacote que contém nuget.targets)
Alexandre Dion
funcionou para mim, apenas lembre-se de executar o cmd como administrador
Mohammad
31

Descobri que a melhor maneira de lidar com isso é simplesmente excluindo a pasta .nuget e reativando a restauração de todo o pacote da solução. Como dito acima, você pode adicionar um comando de atualização automática à sua construção, mas isso não atualizará os destinos ou arquivos de configuração se houver alterações entre as versões (ou removerá a referência de sua solução). Talvez não seja um grande problema, mas esta é a maneira certa de garantir que você tenha o exe e os arquivos de configuração mais recentes. E, no final do dia, a atualização é um problema apenas se você precisar acessar um novo comando ou se houver uma alteração importante em uma nova versão.

Chris Kirby
fonte
3
+1 - Descobri que esta é a melhor maneira de obter atualizações do NuGet.exe e do NuGet.targetsarquivo (o que também é importante). Apenas certifique-se de salvar todas as personalizações feitas no NuGet.targetsarquivo (por exemplo, PackageSources personalizados) para que você possa reaplicá-las ao novo arquivo.
Jesse Webb
ótimo que funcionou para mim como charme !! obrigado pela informação
Gayan
-3

Veja a postagem de David Ebbo em seu blog

Basicamente, tudo que você precisa fazer é criar um arquivo NuGet.Config próximo ao seu arquivo .sln, contendo:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>
Rodolpho Brock
fonte
1
A questão pergunta como atualizar automaticamente o nuget.exe para a versão mais recente ao usar a restauração de pacote. A postagem no blog de David Ebbo apenas explica como restaurar pacotes usando nuget.exe.
Frith,
Você provavelmente deve especificar qual parte da pergunta você responde, então, ao olhar para o título da pergunta e a resposta aceita, é fácil considerar esta resposta errada ...
Jens