Estou tentando construir uma solução com packages
falta de conteúdo (excetorepositories.config
dentro) com o MSBuild 12.0. Espero que ele restaure automaticamente todos os pacotes ausentes antes de compilar, mas este não é o caso - o MsBuild relata toneladas de erros:
"está faltando uma diretiva using ou uma referência do assembly?"
NuGet Manager é 2.7 (vejo isso no Visual Studio 2013 sobre a caixa). Eu até tentei passar o EnableNuGetPackageRestore=true
parâmetro - sem sorte. o que estou perdendo?
Respostas:
ATUALIZADO com a documentação oficial do NuGet mais recente a partir da v3.3.0
Abordagens de restauração de pacote
fonte
Se você estiver usando o Visual Studio 2017 ou posterior, que vem com o MSBuild 15 ou posterior, e seus arquivos .csproj estiverem no novo
PackageReference
formato , o método mais simples é usar o novoRestore
destino MSBuild .Ninguém realmente respondeu à pergunta original, que é "como faço para que os pacotes NuGet sejam restaurados automaticamente ao compilar a partir da linha de comando com o MSBuild?" A resposta é: a menos que você esteja usando a opção "Habilitar restauração de pacote NuGet" (que agora está obsoleta de acordo com esta referência ), você não pode (mas veja abaixo). Se você está tentando fazer, por exemplo, compilações automatizadas em um servidor de CI, isso é uma droga.
No entanto, há uma maneira um pouco indireta de obter o comportamento desejado:
nuget restore
qual fará o download automático de todos os pacotes ausentes.msbuild
para construir sua solução.Afora isso: embora a maneira nova e recomendada de fazer a restauração automática de pacotes envolva menos desordem em seu controle de versão, ela também torna a restauração de pacotes de linha de comando impossível, a menos que você pule o aro extra de baixar e executar
nuget.exe
. Progresso?fonte
nuget.exe
em / trunk / ext). Um passo à frente - dois passos atrás :(A Restauração Automática de Pacote do Nuget é um recurso do Visual Studio (começando em 2013), não do MSBuild. Você terá que executar
nuget.exe restore
se quiser restaurar pacotes da linha de comando.Você também pode usar o recurso Habilitar restauração do pacote Nuget, mas isso não é mais recomendado pelo pessoal do nuget porque faz alterações intrusivas nos arquivos do projeto e pode causar problemas se você construir esses projetos em outra solução.
fonte
Levei algum tempo para descobrir a imagem completa e gostaria de compartilhar aqui.
O Visual Studio tem duas abordagens para usar a restauração de pacote: Restauração automática de pacote e restauração de pacote integrada ao MSBuild. O 'MSBuild-Integrated Package Restore' restaura pacotes DURANTE o processo de construção que pode causar problemas em alguns cenários. A 'Restauração automática de pacote' é a abordagem recomendada pela equipe do NuGet.
Existem várias etapas para fazer a 'Restauração Automática de Pacote' funcionar:
No Visual Studio, Ferramentas -> Extensões e atualizações, Atualizar NuGet se houver uma versão mais recente (versão 2.7 ou posterior)
Se você usar o TFS, na pasta .nuget da solução, remova os arquivos NuGet.exe e NuGet.targes. Em seguida, edite NuGet.Config para não fazer check-in de pacotes NuGet:
Se você fez check-in da pasta de pacotes da solução no TFS antes, exclua a pasta e faça check-in da exclusão da exclusão da pasta do pacote.
Se você não usa o TFS, exclua a pasta .nuget.
Em cada arquivo de projeto (.csproj ou .vbproj) em sua solução, remova a linha que faz referência ao arquivo NuGet.targets. A referência se parece com isto:
Remova esta linha em cada arquivo de projeto em sua solução.
No menu do Visual Studio, por meio de
Ferramentas -> Opções -> Gerenciador de pacotes -> Geral ou Ferramentas -> Gerenciador de pacotes NuGet -> Configurações do gerenciador de pacotes
habilite as duas opções a seguir 1) 'Permitir que o NuGet baixe pacotes ausentes' 2) 'Verificar automaticamente se há pacotes ausentes durante a compilação no Visual Studio'
Teste a configuração de restauração de seu pacote seguindo as seguintes etapas
fonte
MSBuild 15 tem a / t: opção de restauração que faz isso. ele vem com o Visual Studio 2017.
Se quiser usar isso, você também terá que usar o novo PackageReference , o que significa substituir o
packages.config
arquivo por elementos como este (faça isso em * .csproj):Há uma migração automática para este formato se você clicar com o botão direito em 'Referências' (pode não aparecer se você apenas abrir o Visual Studio, reconstruir ou abrir a janela 'Gerenciar pacotes NuGet para solução' e ela começará a aparecer).
fonte
Ian Kemp tem a resposta (tem alguns pontos aliás ..), isso é simplesmente adicionar um pouco de carne a um de seus passos.
A razão pela qual acabei aqui foi que as máquinas de desenvolvimento estavam construindo bem, mas o servidor de construção simplesmente não estava baixando os pacotes necessários (pasta de pacotes vazia) e, portanto, a construção estava falhando. No entanto, fazer logon no servidor de compilação e compilar manualmente a solução funcionou.
Para cumprir a segunda das etapas de 3 pontos de Ians (executando a restauração do nuget ), você pode criar um destino MSBuild executando o comando exec para executar o comando de restauração do nuget, como abaixo (neste caso, nuget.exe está na pasta .nuget, em vez de no caminho), que pode então ser executado em uma etapa de construção do TeamCity (outro CI disponível ...) imediatamente antes de construir a solução
Para o registro, eu já tentei o tipo de execução "nuget installer", mas esta etapa estava travando em projetos da web (funcionou para projetos de DLL e Windows)
fonte
Observe que se você estiver usando o TeamCity como um servidor de compilação, receberá uma etapa de "Instalador NuGet" que pode ser usada para restaurar todos os pacotes antes da etapa de compilação.
fonte
Existe um packages.config arquivo com o projeto, ele contém os detalhes do pacote.
Também há uma pasta .nuget que contém NuGet.exe e NuGet.targets . se algum dos arquivos estiver faltando, ele não restaurará o pacote ausente e causará "está faltando uma diretiva de uso ou uma referência de assembly?" erro
fonte
.nuget
pasta e nunca existiu. Todos ospackages.config
arquivos nas pastas do projeto estão no lugar.Às vezes, isso ocorre quando você tem a pasta do pacote que está tentando restaurar dentro da pasta "packages" (ou seja, "Packages / EntityFramework.6.0.0 /" ), mas as "DLLs" não estão dentro dela (a maior parte do controle de versão sistemas ignoram automaticamente os arquivos ".dll"). Isso ocorre porque antes do NuGet tentar restaurar cada pacote, ele verifica se as pastas já existem; portanto, se existirem, o NuGet presume que a "dll" está dentro dele. Portanto, se este for o problema para você, basta excluir a pasta que o NuGet irá restaurá-la corretamente.
fonte
Tive um problema com os pacotes nuget não sendo incluídos em uma compilação noturna com script que cria o arquivo sln usando devenv.exe.
Segui o conselho da Microsoft e a etapa principal foi atualizar a configuração do NuGet
%AppData%/NuGet
para que contivesse:fonte
No Visual Studio 2017 - quando você compila usando IDE - ele irá baixar todos os pacotes nuget ausentes e salvar na pasta "pacotes".
Mas na compilação da máquina de construção foi feita usando msbuild.exe. Nesse caso, baixei o nuget.exe e mantive o caminho.
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, você pode ignorar esse parâmetro)
fonte
Você também pode usar
para restaurar os pacotes NuGet no Console de gerenciamento de pacotes no Visual Studio.
fonte