Como posso activar a recuperação do pacote NuGet no Visual Studio?

há um post similar na pilha, mas isso não ajuda com o meu problema, possivelmente porque eu estou usando Visual Studio 2015.

Como é que consigo que a opção "Activar a recuperação do pacote NuGet" apareça no VS2015?

escolhi o ficheiro > Novo projecto e criei um vazio ASP.NET aplicação web. Estou à procura desta opção de menu.

enter image description here

Devo mencionar que procurei qualquer arquivo NuGet pré-existente na minha pasta do projeto e não há nenhum.

Author: Dan Beaulieu, 2015-01-12

19 answers

Demorou muito tempo, mas finalmente encontrei este documento em migrando Soluções Integradas em MSBuild para a restauração automática de pacotes e fui capaz de resolver o problema usando os métodos descritos aqui.

  1. remover a pasta de solução '.nuget' da solução
  2. Remova todas as referências a nuget.targets dos seus ficheiros .csproj ou .vbproj. Embora não seja oficialmente suportado, o documento liga-se a um script PowerShell Se tiver muitos projectos que preciso de ser limpo. Eu editei manualmente o meu à mão para que eu não possa dar qualquer feedback sobre a minha experiência com ele.
Quando editarem os vossos ficheiros manualmente, eis o que vão procurar:

Solution File (.sln)

Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F4AEBB8B-A367-424E-8B14-F611C9667A85}"
ProjectSection(SolutionItems) = preProject
    .nuget\NuGet.Config = .nuget\NuGet.Config
    .nuget\NuGet.exe = .nuget\NuGet.exe
    .nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
EndProject

Ficheiro Do Projecto (.csproj/.vbproj)

  <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>
 227
Author: Vinney Kelly, 2015-07-03 16:23:02

A Microsoft deixou cair o suporte para o 'activar a recuperação do pacote NuGet' no VS2015 e você precisa de fazer algumas alterações manuais para migrar soluções antigas ou adicionar a funcionalidade a novas soluções. A nova funcionalidade está muito bem descrita em Restauração Do pacote NuGet .

Existe também um guia de migração para os projectos existentes (como já foi referido) aqui: NuGet Migration Guide

Ao actualizar:

  1. não apague o .nuget Directorio.
  2. apaga o nuget.exe e nuget.alvos de ficheiros.
  3. Deixa o nuget.configuracao. Expurga manualmente cada um dos ficheiros do projecto de qualquer referência aos alvos NuGet. O script de Powershell mencionado parecia fazer mais danos do que bem.

Ao criar um novo projecto:

    Na sua solução Visual Studio 2015, crie um directório de soluções chamado .nuget.
  1. crie uma pasta actual da pasta da solução (onde a .sln file vive) e chama-o.nuget (note que o diretório da solução não é o mesmo que o diretório do sistema de arquivos real, mesmo que eles tenham o mesmo nome).
  2. Criar um arquivo no .a pasta nuget chama-se nuget.configuracao.

  3. Adiciona o ' nuget.configuração ' para a pasta de solução criada no Passo # 2.

  4. Coloque o seguinte texto no nuget.ficheiro de configuração:

    <?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositorypath" value="$\..\..\..\..\Packages" /> </config> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>

Este ficheiro de configuração permitir-lhe-á consolidar todos os seus pacotes em um único lugar para que você não tenha 20 cópias diferentes do mesmo pacote flutuando em torno de seu sistema de arquivos. A localização relativa irá mudar dependendo da sua arquitectura de directórios da solução, mas deverá apontar para um directório comum a todas as suas soluções.

Tem de reiniciar o visual studio depois de fazer o Passo 5. Nuget não vai reconhecer as mudanças até que você faça isso.

Finalmente, poderá ter de usar o 'Nuget Package Manager for Solutions' para desinstalar e depois re-instalar os pacotes. Não sei se isto foi um efeito colateral do script Powershell que corri ou apenas um método para pôr o NuGet de volta a funcionar. Uma vez que eu fiz todos esses passos, minha arquitetura de construção complicada funcionou perfeitamente em trazer novos pacotes quando eu verifiquei projetos fora do TFVC.

 56
Author: Donald Airey, 2017-09-21 11:39:12

Opcionalmente, poderá remover todas as pastas da pasta " pacotes "e seleccionar" gerir os pacotes NuGet para solução...". Neste caso, o botão" Restaurar " aparece nas janelas dos pacotes NuGet.

 29
Author: Ivan Branets, 2015-06-26 10:47:07

Se tiver algum problema ou não tiver quaisquer pacotes, poderá simplesmente carregar com o botão direito no seu projecto e seleccionar "gerir Pacotes NuGet para solução...". Depois de carregar neste botão, irá abrir um ecrã onde poderá ver uma barra de menu a dizer "restaurar": Restore

Carregue nele e os pacotes necessários serão instalados automaticamente.
Acho que é isto que procuras, isto resolveu os meus problemas.

 11
Author: Yenthe, 2015-03-17 08:01:14

Tal como já mencionado pelo Mike, não existe nenhuma opção "Activar a recuperação do pacote NuGet" em VS2015. Terá de invocar o processo de restauração manualmente. Uma forma simpática-sem mexer nos ficheiros e pastas - está a usar a consola de gestão de pacotes NuGet: carregue no campo 'arranque rápido' (normalmente no canto superior direito), indique console, Abra a consola de gestão e indique o comando:

Update-Package –reinstall

Isto irá re-instalar todos os pacotes de todos os projectos na sua solução. Para indique um único projecto, indique:

Update-Package –reinstall -ProjectName MyProject

Claro que isto só é necessário quando o botão Restore - por vezes oferecido por VS2015 - não está disponível. Os comandos de actualização mais úteis são listados e explicados aqui: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

 7
Author: Jack Miller, 2017-08-17 05:26:25

Ao actualizar projectos com pacotes nuget de vx20xx para VS2015, poderá ter um problema com pacotes nuget.

Exemplo de mensagem de erro: Este projecto referencia pacotes NuGet que faltam neste computador. Active a reposição do pacote NuGet para os Transferir.

Actualização 2016-02-06: eu tinha um link para a informação mas já não funciona. Suspeito que um caminho recente resolveu o problema ???

Corrigi o meu problema ao escrever um programa que faz recuperação de pacotes integrados em MSBuild vs. Recuperação Automática de Pacotes

Você pode obter o executável da ferramenta aqui.

Por favor, diga-me o resultado: -)!

enter image description here

Código de referência:

<Window x:Class="FixNuGetProblemsInVs2015.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:FixNuGetProblemsInVs2015"
        mc:Ignorable="d"
        Title="Fix NuGet Packages problems in Visual Studio 2015 (By Eric Ouellet)" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="10"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="0">Root directory of projects</TextBlock>
        <Grid Grid.Row="0" Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBox Grid.Column="0" Name="DirProjects"></TextBox>
            <Button Grid.Column="1" VerticalAlignment="Bottom" Name="BrowseDirProjects" Click="BrowseDirProjectsOnClick">Browse...</Button>
        </Grid>

        <!--<TextBlock Grid.Row="1" Grid.Column="0">Directory of NuGet Packages</TextBlock>
        <Grid Grid.Row="1" Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBox Grid.Column="0" Name="DirPackages"></TextBox>
            <Button Grid.Column="1"  Name="BrowseDirPackages" Click="BrowseDirPackagesOnClick">Browse...</Button>
        </Grid>-->

        <TextBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Name="TxtLog" IsReadOnly="True"></TextBox>

        <Button Grid.Row="3" Grid.Column="0" Click="ButtonRevertOnClick">Revert back</Button>
        <Button Grid.Row="3" Grid.Column="2" Click="ButtonFixOnClick">Fix</Button>
    </Grid>
</Window>


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
using Application = System.Windows.Application;
using MessageBox = System.Windows.MessageBox;

/// <summary>
/// Applying recommanded modifications in section : "MSBuild-Integrated package restore vs. Automatic Package Restore"
/// of : http://docs.nuget.org/Consume/Package-Restore/Migrating-to-Automatic-Package-Restore
/// </summary>

namespace FixNuGetProblemsInVs2015
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DirProjects.Text = @"c:\prj";
            // DirPackages.Text = @"C:\PRJ\NuGetPackages";
        }

        private void BrowseDirProjectsOnClick(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            dlg.SelectedPath = DirProjects.Text;
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                DirProjects.Text = dlg.SelectedPath;
            }
        }

        //private void BrowseDirPackagesOnClick(object sender, RoutedEventArgs e)
        //{
        //  FolderBrowserDialog dlg = new FolderBrowserDialog();
        //  dlg.SelectedPath = DirPackages.Text;
        //  if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        //  {
        //      DirPackages.Text = dlg.SelectedPath;
        //  }
        //}

        // private string _dirPackages;

        private void ButtonFixOnClick(object sender, RoutedEventArgs e)
        {
            DoJob(false);
        }

        private void ButtonRevertOnClick(object sender, RoutedEventArgs e)
        {
            DoJob(true);
        }

        private void DoJob(bool revert = false)
        {
            TxtLog.Text = "";

            string dirProjects = DirProjects.Text;
            // _dirPackages = DirPackages.Text;

            if (!Directory.Exists(dirProjects))
            {
                MessageBox.Show("Projects directory does not exists: " + dirProjects);
                return;
            }

            //if (!Directory.Exists(_dirPackages))
            //{
            //  MessageBox.Show("Packages directory does not exists: " + _dirPackages);
            //  return;
            //}

            RecurseFolder(dirProjects, revert);
        }

        private void RecurseFolder(string dirProjects, bool revert = false)
        {
            if (revert)
            {
                Revert(dirProjects);
            }
            else
            {
                FixFolder(dirProjects);
            }

            foreach (string subfolder in Directory.EnumerateDirectories(dirProjects))
            {
                RecurseFolder(subfolder, revert);
            }
        }

        private const string BackupSuffix = ".fix_nuget_backup";

        private void Revert(string dirProject)
        {
            foreach (string filename in Directory.EnumerateFiles(dirProject))
            {
                if (filename.ToLower().EndsWith(BackupSuffix))
                {
                    string original = filename.Substring(0, filename.Length - BackupSuffix.Length);
                    if (File.Exists(original))
                    {
                        File.Delete(original);                                          
                    }
                    File.Move(filename, original);
                    Log("File reverted: " + filename + " ==> " + original);
                }
            }
        }

        private void FixFolder(string dirProject)
        {
            BackupFile(System.IO.Path.Combine(dirProject, "nuget.targets"));
            BackupFile(System.IO.Path.Combine(dirProject, "nuget.exe"));

            foreach (string filename in Directory.EnumerateFiles(dirProject))
            {
                if (filename.ToLower().EndsWith(".csproj"))
                {
                    FromProjectFileRemoveNugetTargets(filename);
                }
            }
        }

        private void BackupFile(string path)
        {
            if (File.Exists(path))
            {
                string backup = path + BackupSuffix;
                if (!File.Exists(backup))
                {
                    File.Move(path, backup);
                    Log("File backup: " + backup);
                }
                else
                {
                    Log("Project has already a backup: " + backup);
                }
            }
        }

        private void FromProjectFileRemoveNugetTargets(string prjFilename)
        {
            XDocument xml = XDocument.Load(prjFilename);

            List<XElement> elementsToRemove = new List<XElement>();

            foreach (XElement element in xml.Descendants())
            {
                if (element.Name.LocalName == "Import")
                {
                    var att = element.Attribute("Project");
                    if (att != null)
                    {
                        if (att.Value.Contains("NuGet.targets"))
                        {
                            elementsToRemove.Add(element);
                        }
                    }
                }

                if (element.Name.LocalName == "Target")
                {
                    var att = element.Attribute("Name");
                    if (att != null && att.Value == "EnsureNuGetPackageBuildImports")
                    {
                        elementsToRemove.Add(element);
                    }
                }
            }

            if (elementsToRemove.Count > 0)
            {
                elementsToRemove.ForEach(element => element.Remove());
                BackupFile(prjFilename);
                xml.Save(prjFilename);
                Log("Project updated: " + prjFilename);
            }
        }

        private void Log(string msg)
        {
            TxtLog.Text += msg + "\r\n";
        }

    }
}
 6
Author: Eric Ouellet, 2016-02-06 21:36:48
Vê as referências no visual studio e vê quais os pacotes que faltam. Agora, clique com o botão direito na solução em Visual e clique em Abrir a pasta no ficheiro explorer. Agora abra a pasta de pacotes e remova a pasta de pacotes em falta. Abrir estúdio visual e construir a solução. todos os pacotes em falta serão restaurados. Por favor, marque isto como Resposta Se eu ajudar.
 5
Author: Sandip Jaiswal, 2016-05-16 10:58:43
Acho que por ... asp.net 4 projeto estamos nos movendo para restauração automática, então não há necessidade para isso. Para projetos mais antigos eu acho que um pouco de trabalho para converter é necessário.

Http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

 4
Author: Luca Morelli, 2015-01-12 06:53:14
Esta abordagem funcionou comigo.
  • Fechar VS2015
  • Abra a solução temporariamente em VS2013 e Active a reposição do pacote nuget {[[8]} Carregando com o botão direito na solução (também fiz uma reconstrução, mas suspeito que não seja necessária).
  • Fechar VS2013
  • reabrir a solução em VS2015

Agora você activou a restauração do pacote nuget também em VS2015.

 4
Author: Håkon Seljåsen, 2016-08-11 17:03:48

Enfrentei o mesmo problema ao tentar construir o projecto de amostra gplus-quickstart-csharp-master .

Olhei atentamente a mensagem de erro e encontrei uma solução para ultrapassar este erro, espero que isto ajude.

  • carregue com o botão direito no ficheiro solution e abra no Windows explorer.
  • cópia NuGet pasta com NuGet.Config, NuGet.exe, NuGet.metas (Transferir ligação ou simplesmente copiar de outro projecto e substituir)
  • tenta para reconstruir a solução.
Divirtam-se !!
 4
Author: Manoj Verma, 2016-09-07 11:51:12

A solução de Ivan Branets ([3]) é essencialmente o que me corrigiu, mas alguns detalhes poderiam ser compartilhados.

No meu caso, eu estava em VS 2015 Usando auto Package restore e TFS. Isto é tudo material bastante padrão.

O problema era que quando outro desenvolvedor tentou obter uma solução do TFS, alguns pacotes não estavam totalmente sendo restaurados. Ainda não tenho a certeza .) Mas a pasta de pacotes continha uma pasta para a referência e o pacote NuGet, mas não estava sendo expandido (digamos uma pasta lib contendo um.o dll estava desaparecido.) Esta metade ali, mas não muito bem conceito estava impedindo o pacote de ser restaurado.

Vais reconhecer isto porque a referência terá um ponto de exclamação amarelo sobre não ser resolvido.

Assim, a solução de apagar a pasta dentro dos pacotes remove o problema de bloqueio da reposição do pacote. Então você pode clique com o botão direito em o nível de solução superior para obter a opção para Restaurar pacotes , e agora deve funcionar.

 3
Author: Greg, 2017-09-21 11:47:18

Fechar VS. Apagar tudo na pasta de pacotes. Reabra a sua solução. Carregue com o botão direito no seu projecto e seleccione 'Gerir os pacotes nuget...'. Irá ver uma barra amarela aparecer no topo da janela do' NuGet Package Manager', pedindo-lhe para repor os pacotes. Isto funcionou comigo.

 3
Author: Mandeep Janjua, 2017-10-22 21:11:38

Consola de gestão de pacotes (Visual Studio, Tools > NuGet Package Manager > Package Manager Console): execute o comando Update-Package-reinstall-ProjectName, onde está o nome do projecto afectado, tal como aparece no Solution Explorer. Use Update-Package-reinstall por si só para restaurar todos os pacotes na solução. Veja Update-Package. Você também pode reinstalar um único pacote, se desejar.

De https://docs.microsoft.com/en-us/nuget/quickstart/restore

 2
Author: Andreas, 2017-10-16 10:02:49

Também pode ser um resultado de executar o programa enquanto você está tentando instalar o pacote. está pintado se você tentar clicá-lo enquanto o IIS construído está rodando em segundo plano.

 1
Author: Katushai, 2017-03-13 18:59:25

Tive de remover a solução de fecho e reabertura da pasta de pacotes (VS2015). Eu não estava migrando e eu não tinha pacotes verificados no controle de origem. Tudo o que posso dizer é que algo ficou confuso e isto consertou-o.

 0
Author: Chris Hammons, 2017-01-04 23:48:11
Caso mais alguém encontre este problema no Visual Studio 2017, certifique-se de que o projeto é aberto pelo the .arquivo sln e não a pasta, como visual studio não vai pegar as configurações se for aberto por pasta. Isso acontece por padrão se você estiver usando serviços online do Visual Studio para o git.
 0
Author: Jack, 2017-07-18 20:56:19

Eu usei msbuild /t:restore.

O meu problema era com o MSBuild. Então eu segui @Vinney Kelly ' s link: migrando Soluções Integradas em MSBuild para restauração automática de pacotes E..... Isso funcionou lindamente.

MSBuild : use o comando msbuild /t:restore, que repõe os pacotes pacotes listados no ficheiro do projecto (apenasPackageReference). Disponivel apenas em NuGet 4.x+ e MSBuild 15.1+, que estão incluídos com Visual Studio 2017 . nuget restore e dotnet restore ambos usam este comando para projetos aplicáveis.

 0
Author: Yitzchak, 2018-06-27 13:46:03

Ajudou-me com as ferramentas >>> Gestor de Pacotes Nuget >>> General depois assinale a opção permitir que o Nuget obtenha o pacote em falta e Verifique automaticamente se faltam pacotes durante a compilação no visual studio .

enter image description here

 0
Author: Anjan Kant, 2018-07-06 17:03:38

Ainda mais simples, adicione A.a pasta do nuget para a sua solução e os 'pacotes do NuGet de restauração' irão aparecer (Não tenho a certeza se o nuget irá aparecer.exe precisa estar presente para que funcione).

 -4
Author: Paxton, 2015-12-06 23:57:49