web-dev-qa-db-fra.com

Comment activer la restauration de paquet NuGet dans Visual Studio?

Il y a un similaire poste sur pile mais cela ne résout pas le problème, peut-être parce que j'utilise Visual Studio 2015.

Comment faire en sorte que l'option "Activer la restauration du paquet NuGet" apparaisse dans VS2015?

J'ai choisi Fichier> Nouveau projet et créé une application Web ASP.NET vide. Je cherche cette option de menu.

enter image description here

Je dois mentionner que j’ai cherché des fichiers nuGet préexistants dans mon dossier de projet et qu’il n’en existe aucun.

244
Dan Beaulieu

Cela a pris beaucoup trop de temps, mais j'ai finalement trouvé ce document sur Migration des solutions MSBuild-Integrated vers la restauration automatique des paquets et j'ai pu résoudre le problème à l'aide des méthodes décrites ici. 

  1. Supprimer le répertoire de solution '.nuget' de la solution 
  2. Supprimez toutes les références à nuget.targets de vos fichiers .csproj ou .vbproj. Bien que cela ne soit pas officiellement pris en charge, le document est lié à un script PowerShell si vous avez beaucoup de projets à nettoyer. J'ai manuellement modifié le mien à la main afin que je ne puisse donner aucun retour d'information concernant mon expérience avec ce logiciel.

Lorsque vous éditez vos fichiers à la main, voici ce que vous chercherez:

Fichier de solution (.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

Fichier de projet (.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>
232
Vinney Kelly

Microsoft a abandonné la prise en charge de «Activer la restauration du paquet NuGet» dans VS2015 et vous devez apporter des modifications manuelles pour migrer d'anciennes solutions ou ajouter la fonctionnalité à de nouvelles solutions. La nouvelle fonctionnalité est très bien décrite dans NuGet Package Restore .

Il existe également un guide de migration pour les projets existants (comme mentionné précédemment): Guide de migration NuGet

Lors de la mise à niveau:

  1. ne supprimez pas le répertoire .nuget.
  2. Supprimez les fichiers nuget.exe et nuget.targets.
  3. Laissez le nuget.config.
  4. Purgez manuellement chacun des fichiers de projet de toute référence aux cibles NuGet. Le script Powershell mentionné semblait faire plus de dégâts que de bien.

Lors de la création d'un nouveau projet:

  1. Dans votre solution Visual Studio 2015, créez un répertoire de solutions appelé .nuget.
  2. Créez un répertoire réel du répertoire de la solution (où réside le fichier .sln) et appelez-le .nuget (notez que le répertoire de la solution n'est pas le même que le répertoire du système de fichiers, même s'ils portent le même nom).
  3. Créez un fichier dans le répertoire .nuget appelé nuget.config.

  4. Ajoutez le 'nuget.config' au répertoire de la solution créé à l'étape 2.

  5. Placez le texte suivant dans le fichier nuget.config:

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

Ce fichier de configuration vous permettra de consolider tous vos paquets en un seul endroit, de sorte que vous ne disposiez pas de 20 copies différentes du même paquet flottant sur votre système de fichiers. Le chemin relatif changera en fonction de l'architecture de votre répertoire de solutions, mais il doit pointer vers un répertoire commun à toutes vos solutions.

Vous devez redémarrer Visual Studio après l’étape 5. Nuget ne reconnaîtra pas les modifications tant que vous ne le ferez pas.

Enfin, vous devrez peut-être utiliser le 'Nuget Package Manager for Solutions' pour désinstaller puis réinstaller les packages. Je ne sais pas s'il s'agissait d'un effet secondaire du script Powershell que j'ai utilisé ou simplement d'une méthode permettant de relancer NuGet. Une fois toutes ces étapes effectuées, mon architecture de construction compliquée a parfaitement fonctionné pour supprimer les nouveaux paquets lorsque j'ai extrait des projets de TFVC.

57
Donald Airey

Vous pouvez éventuellement supprimer tous les dossiers du dossier "packages" et sélectionner "Gérer les packages NuGet pour la solution ...". Dans ce cas, le bouton "Restaurer" apparaît sur les paquets Windows de NuGet. 

31
Ivan Branets

Si vous rencontrez des problèmes ou manquez des packages, vous pouvez simplement cliquer avec le bouton droit de la souris sur votre projet et sélectionner " Gérer les packages NuGet pour Solution ... ". Après avoir cliqué sur ceci, un écran s’ouvrira et vous verrez une barre de menu disant "Restaurer": Restore

Cliquez dessus et les packages requis seront installés automatiquement.
Je crois que c'est ce que vous recherchez, cela a résolu mes problèmes.

12
Yenthe

Comme mentionné par Mike, il n'y a pas d'option 'Activer la restauration du paquet NuGet' dans VS2015. Vous devrez appeler le processus de restauration manuellement. Une bonne manière - sans jouer avec les fichiers et les répertoires - est d'utiliser la console de gestion de paquet NuGet: Cliquez dans le champ 'Démarrage rapide' (généralement dans le coin supérieur droit), entrez console, ouvrez la console de gestion, puis entrez commander:

Update-Package –reinstall

Cela réinstallera tous les packages de tous les projets de votre solution. Pour spécifier un seul projet, entrez:

Update-Package –reinstall -ProjectName MyProject

Bien sûr, cela n’est nécessaire que lorsque le bouton Restore - parfois proposé par VS2015 - n’est pas disponible. Des commandes de mise à jour plus utiles sont répertoriées et expliquées ici: https://docs.Microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

11
Jack Miller

Lors de la mise à niveau de projets avec des packages de nuget de Vx20XX à VS2015, vous pouvez rencontrer un problème avec les packages de nuget. 

Exemple de message d'erreur: Ce projet référence des packages NuGet manquants sur cet ordinateur. Activez la restauration du paquet NuGet pour les télécharger. 

Mise à jour 2016-02-06: J'avais un lien vers l'information mais cela ne fonctionne plus. Je soupçonne qu'un chemin récent a résolu le problème ???

J'ai résolu le problème en écrivant un petit programme qui fait Restauration de paquet MSBuild-Integrated par rapport à restauration de paquet automatique

Vous pouvez télécharger l'exécutable de l'outil ici .

S'il vous plaît laissez-moi savoir le résultat :-) !

 enter image description here

Code comme référence:

<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
Eric Ouellet

Allez dans Références dans Visual Studio et regardez quels paquetages sont manquants . Maintenant, cliquez avec le bouton droit de la souris sur Solution in Visual et cliquez sur le dossier ouvert dans l'explorateur de fichiers . Ouvrez le dossier packages et supprimez le dossier packages manquants . Visual Studio et juste construire la solution. tous les paquets manquants seront restaurés .. Veuillez marquer ceci comme réponse si j’ai aidé.

5
Sandip Jaiswal

Je suppose que, pour le projet asp.net 4, nous passons à la restauration automatique, elle n’est donc pas nécessaire. Pour les projets plus anciens, je pense qu’un peu de travail à convertir est nécessaire.

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

4
Luca Morelli

J'ai rencontré le même problème en essayant de créer un exemple de projet gplus-quickstart-csharp-master .

J'ai regardé de près le message d'erreur et trouvé une solution de contournement pour surmonter cette erreur, j'espère que cela aidera.

  • Faites un clic droit sur le fichier de solution et ouvrez-le dans Windows Explorer. 
  • Copier le dossier .nuget avec NuGet.Config, NuGet.exe, NuGet.targets (télécharger lien ou simplement copier depuis un autre projet et remplacé)
  • Essayez de reconstruire la solution.

Prendre plaisir !!

4
Manoj Verma

Cette approche a fonctionné pour moi: 

  • Fermer VS2015
  • Ouvrez temporairement la solution dans VS2013 et activez la restauration du paquet Nuget en cliquant avec le bouton droit de la souris sur la solution (j'ai également procédé à une reconstruction, mais je soupçonne que cela n'est pas nécessaire). 
  • Fermer VS2013
  • Rouvrez la solution dans VS2015

Vous avez maintenant activé la restauration du paquet Nuget dans VS2015 également.

4
Håkon Seljåsen

La solution de Ivan Branets est essentiellement ce qui a réglé ce problème pour moi, mais quelques détails supplémentaires pourraient être partagés.

Dans mon cas, j'étais dans VS 2015 en utilisant Auto Package restore et TFS. Ce sont tous de jolies choses par défaut.

Le problème était que lorsqu'un autre développeur tentait d'obtenir une solution de TFS, certains packages n'étaient pas entièrement restaurés. (Pourquoi, je ne suis pas encore tout à fait sûr.) Mais le dossier packages contenait un dossier pour la référence et le package NuGet, mais il ne se développait pas (par exemple, un dossier lib contenant un fichier .dll manquait.) Cette moitié là, mais ce n’était pas tout à fait le bon concept empêchait la restauration du paquet.

Vous le reconnaîtrez parce que la référence aura un point d’exclamation jaune sur le fait de ne pas être résolu.

Ainsi, la solution de supprimer le dossier au sein des packages supprime le problème de blocage de la restauration du package. Ensuite, vous pouvez cliquer avec le bouton droit de la souris sur le niveau de solution le plus élevé pour obtenir l'option de restaurer les packages, et cela devrait maintenant fonctionner.

3
Greg

Fermer VS. Supprimer tout sous le dossier packages. Rouvrez votre solution. Faites un clic droit sur votre projet, sélectionnez "Gérer les paquets de nuget ...". Vous verrez apparaître une barre jaune en haut de la fenêtre 'Nuget Package Manager', vous demandant de restaurer les packages. Cela a fonctionné pour moi.

3
Mandeep Janjua

Console du gestionnaire de packages (Visual Studio, Outils> Gestionnaire de packages NuGet> Console du gestionnaire de packages): Exécutez la commande Update-Package -reinstall -ProjectName où est le nom du projet affecté tel qu'il apparaît dans l'explorateur de solutions. Utilisez Update-Package -reinstall pour restaurer tous les packages de la solution. Voir Update-Package. Vous pouvez également réinstaller un seul package, si vous le souhaitez.

from https://docs.Microsoft.com/en-us/nuget/quickstart/restore

2
Andreas

J'ai utilisé msbuild /t:restore.


Crédit et source:

Mon problème était lié à MSBuildAlors j'ai suivi le lien de @Vinney Kelly: Migration des solutions MSBuild-Integrated vers la restauration automatique des packages

et...

Cela a fonctionné comme un charme =]

MSBuild: utilisez la commande msbuild /t:restore, qui restaure les packages packages répertoriés dans le fichier de projet (PackageReference uniquement). Disponible uniquement dans NuGet 4.x + et MSBuild 15.1+, inclus dans VisualStudio 2017. nuget restore et dotnet restore utilisent tous les deux cette commande pour les projets applicables.

1
Yitzchak

Cela peut également résulter de l'exécution du programme pendant que vous essayez d'installer le package. il est grisé si vous essayez de cliquer dessus alors que le composant intégré IIS fonctionne en arrière-plan.

1
Katushai

J'ai dû supprimer le dossier de paquets fermer et rouvrir la solution (VS2015). Je n'étais pas en train de migrer et aucun paquet n'a été vérifié dans le contrôle de source. Tout ce que je peux dire, c'est que quelque chose s'est brouillé et que cela a été corrigé.

0
Chris Hammons

M'a aidé par Outils >>> Gestionnaire de paquets Nuget >>> Général puis cochez l'option Autoriser Nuget à télécharger le paquet manquant et Vérifier automatiquement les paquets manquants lors de l'intégration Visual Studio.

 enter image description here

0
Anjan Kant

Si quelqu'un d'autre trouve ce problème dans Visual Studio 2017, assurez-vous que le projet est ouvert par le fichier .sln et non par le dossier, car Visual Studio ne détectera pas les paramètres s'il est ouvert par dossier. Cela se produit par défaut si vous utilisez les services en ligne Visual Studio pour git.

0
Jack

Pour Projets .NET Core , exécutez la commande dotnet restore ou dotnet build dans NuGet Package Manager Console (qui exécute automatiquement la restauration)

Vous pouvez exécuter la console à partir de

Outils> Gestionnaire de paquets NuGet> Console du gestionnaire de paquets

0
MOH3N

Utilisez cette commande pour restaurer tous les packages

dotnet restore
0
Abdus Salam Azad

Si tout échoue (ou peut-être avant alors), vous pouvez vérifier si NuGet est une source de paquet. J'ai installé VS2017 et ce n'était PAS là par défaut. Je pensais que c'était un peu bizarre.

  1. Outils - Gestionnaire de paquets NuGet - Paramètres du gestionnaire de paquets
  2. Cliquez sur 'Sources de paquets' dans la partie gauche de la boîte de dialogue.
  3. Utilisez le signe plus (+) pour ajouter l'URL du Nuget: https://api.nuget.org/v3/index.json
0
douglas.kirschman