Comment activer la restauration de packages NuGet dans Visual Studio?

273

Il existe un article similaire sur la pile, mais cela ne résout pas mon problème, car j'utilise Visual Studio 2015.

Comment faire apparaître l'option "Activer la restauration du package NuGet" dans VS2015?

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

entrez la description de l'image ici

Je dois mentionner que j'ai cherché des fichiers nuGet préexistants dans mon dossier de projet et il n'y en a pas.

Dan Beaulieu
la source
4
Assurez-vous que vous essayez cela contre votre solution et non contre le projet Web. Par défaut, la solution n'est pas affichée lorsqu'il n'y a qu'un seul projet
JConstantine
1
Oui, c'est certainement une erreur facile à faire, mais je me suis assuré de vérifier la solution, je pense que cela pourrait être lié à 2015. L'option Activer est disponible dans VS2013 lorsque je suis les mêmes étapes.
Dan Beaulieu
2
Pareil ici. J'ai même essayé de supprimer le dossier .nuget qui réactive l'option Activer la restauration du package NuGet dans VS 2013 mais toujours pas de dés. J'essaie d'ouvrir une application MVC existante qui a été créée dans VS 2013.
Vinney Kelly
4
@justanotherdev Il serait utile que vous fournissiez une référence au nouveau flux de travail pour rendre votre commentaire un peu plus productif.
avantprime
1
Je n'ai pas vu l'article de David Ebbo référencé par oligofren alors j'ai juste ouvert les fichiers sln & csproj dans Notepad ++ et supprimé les sections qu'il a illustrées. J'ai ouvert la solution dans VS2015 et, une fois que j'ai enregistré les fichiers, VS m'a invité à les recharger et mes références de solution sont maintenant correctes et ma solution se compile. Merci beaucoup, Vinney!
Rich Ward

Réponses:

248

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

  1. Supprimez le '.nuget'répertoire de la solution de la solution
  2. Supprimez toutes les références à nuget.targetspartir de vos .csprojou .vbprojfichiers. Bien qu'il ne soit pas officiellement pris en charge, le document renvoie à un script PowerShell si vous avez beaucoup de projets qui doivent être nettoyés. J'ai modifié manuellement le mien à la main, donc je ne peux pas donner de commentaires concernant mon expérience avec celui-ci.

Lorsque vous modifiez vos fichiers à la main, voici ce que vous recherchez:

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>
Vinney Kelly
la source
3
Il me manque totalement quelque chose ici. Lorsque j'utilise cette méthode, j'obtiens une cargaison de packages installés dans chaque solution que j'ai. J'ai une solution avec 10 packages et une autre solution avec exactement les mêmes packages: deux répertoires différents sont créés contenant chacun les 10 packages. En utilisant cette méthode, comment consolidez-vous tous vos packages dans un seul répertoire (comme le permet l'ancienne méthode VS2013 en modifiant le fichier NuGet.Config)?
Quarkly
Vous ne voyez pas de dossier .nuget? Allez voir les solutions pour supprimer des dossiers dans le dossier des packages. Il est possible que votre package soit à moitié restauré et que les ordures empêchent sa restauration complète.
Greg
C'était effectivement la solution. En plus de cela - j'ai ajouté "restauration nuget" avant de commencer à construire le projet. les paquets nuget sont téléchargés automatiquement et la construction du projet fonctionne bien après cela.
TarmoPikaro
5
Pour gagner un peu de temps, le script à exécuter à partir du référentiel GitHub mentionné par @VinneyKelly est migrateToAutomaticPackageRestore.ps1, sa magie fonctionne!
Riga
60

Microsoft a abandonné la prise en charge de «Activer la restauration du package NuGet» dans VS2015 et vous devez effectuer certaines modifications manuelles pour migrer les anciennes solutions ou ajouter la fonctionnalité aux nouvelles solutions. La nouvelle fonctionnalité est assez bien décrite dans NuGet Package Restore .

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

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 à la main 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 réel 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 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 packages en un seul endroit afin de ne pas avoir 20 copies différentes du même package 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 avoir effectué l'étape 5. Nuget ne reconnaîtra pas les modifications tant que vous ne l'avez pas fait.

Enfin, vous devrez peut-être utiliser le «Nuget Package Manager for Solutions» pour désinstaller puis réinstaller les packages. Je ne sais pas si c'était un effet secondaire du script Powershell que j'ai exécuté ou juste une méthode pour remettre NuGet en marche. Une fois que j'ai fait toutes ces étapes, mon architecture de construction compliquée a parfaitement fonctionné pour supprimer de nouveaux packages lorsque j'ai vérifié les projets hors de TFVC.

Quarkly
la source
1
Pourquoi supprimer le fichier nuget.targets, vais-je obtenir une version cohérente lorsque celle-ci est manquante?
Frode Nilsen
1
Les cibles semblent désormais être intégrées à l'EDI, ainsi que la fonction que le «nugget.exe» fournissait auparavant. La seule chose dont vous avez encore besoin est la configuration.
Quarkly
1
En plus des étapes mentionnées par DRAirey, j'ai dû faire ce qui suit: 1) Au lieu de $ \ .. \ .. \ .. \ .. \ Packages, utilisé ../../ (convention de chemin d'accès parent Windows, non $ au début 2) Enregistrez la solution, fermez et rouvrez pour que nuget.config soit lu et honoré par l'installation du package
Sudhanshu Mishra
Cela m'a aidé pour mon nouveau projet VS2015 où j'ai validé le répertoire des packages et les autres membres de l'équipe n'ont pas pu reconstruire en raison des dépendances de NuGet.
azec-pdx
1
Vous devez redémarrer Visual Studio après avoir effectué l'étape 5. Nuget ne reconnaîtra pas les modifications tant que vous ne l'avez pas fait.
Barry Colebank Jr
35

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 packages NuGet Windows.

Ivan Branets
la source
1
Essayez de fermer et de rouvrir la fenêtre des packages NuGet après avoir supprimé les dossiers du dossier "packages".
Ivan Branets
6
+1 Cela a fonctionné pour moi, notez que le bouton de restauration apparaît en haut de la fenêtre, juste en dessous de l'onglet. Dit: "Certains packages NuGet sont manquants dans cette solution. Cliquez pour restaurer à partir de vos sources de packages en ligne."
Eruza
Si simple et facile .. cela a fonctionné pour moi .. Je suppose que cela devrait être une réponse plus votée :)
Nirman
Si simple et facile. Cela devrait être la réponse.
Axel
Ne serait-ce pas une bonne idée d'ajouter ce dossier au fichier .gitignore?
Axel
26

Comme déjà mentionné par Mike, il n'y a pas d'option «Activer la restauration du package NuGet» dans VS2015. Vous devrez invoquer le processus de restauration manuellement. Une bonne façon - sans jouer avec les fichiers et les répertoires - utilise la console de gestion de package NuGet : cliquez dans le champ `` Démarrage rapide '' (généralement dans le coin supérieur droit), entrez console, ouvrez la console de gestion et entrez la commande:

Update-Package reinstall

Cela réinstalle tous les packages de tous les projets dans 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 Restorebouton - 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

Jack Miller
la source
Merci beaucoup, j'ai eu le même problème. Je viens de résoudre mon problème via votre procédure. Merci beaucoup
McElie
Même chose ici, le seul qui a fonctionné et n'a pas besoin d'un tas de choses écrites partout
Harvey Lin
La réponse la plus utile ici!
Neo
13

Si vous avez des problèmes ou si vous manquez des packages, vous pouvez simplement cliquer avec le bouton droit dans votre projet et sélectionner « Gérer les packages NuGet pour la solution ... ". Après avoir cliqué dessus, un écran s'ouvrira où vous verrez une barre de menu disant "Restaurer": Restaurer

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

Yenthe
la source
3
Mais cela n'aide que si cette barre d'alerte apparaît, ce n'est pas le cas dans mon cas.
Nicholas Petersen
2
Une étape qui installe manuellement un package manque complètement le point d'une restauration automatisée.
Quarkly
Je crois que cela devrait probablement être la réponse acceptée, c'est la même fonctionnalité
user25064
1
J'ai pu voir l'option de restauration en faisant un clic droit sur la solution. Il était là sous "Gérer les packages NuGet pour la solution". A fait l'affaire pour moi.
Daryl
1
Ne fonctionne pas pour moi - je vois des avertissements dans la solution concernant les packages de nuget manquants, mais gérer les packages de nuget ne me propose pas de les télécharger. Je ne peux pas non plus construire ni restaurer. De plus, la commande de restauration ne fait rien.
Markus
7

Utilisez cette commande pour restaurer tous les packages

dotnet restore
Abdus Salam Azad
la source
Fonctionne parfaitement
JP..t
6

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

Exemple de message d'erreur: ce projet fait référence aux packages NuGet manquants sur cet ordinateur. Activez NuGet Package Restore pour les télécharger.

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

J'ai résolu mon problème en écrivant un petit programme qui restauration de packages MSBuild-Integrated par rapport à la restauration automatique de packages

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

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

entrez la description de l'image ici

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";
        }

    }
}
Eric Ouellet
la source
Le programme a bien fonctionné pour convertir une tonne de projets dans ma solution. La dernière version a également un champ «Répertoire des packages NuGet» mais ne semble pas affecter la sortie. Qu'est ce que ça fait?
Christoffer Årstrand
Désolé, je n'en ai aucune idée. Je soupçonne que cela dépendra du contenu du fichier. Vous pouvez peut-être suivre la fonction: "FromProjectFileRemoveNugetTargets" et voir si votre fichier pourrait être affecté? Désolé pour cette mauvaise réponse, je ne me souviens pas de ce que j'ai codé :-(! Je sais juste que j'ai utilisé deux fois avec succès 2 ordinateurs différents.
Eric Ouellet
5

Allez dans Références dans Visual Studio et regardez quels paquets manquent. Maintenant, faites un clic droit sur Solution dans Visual et cliquez sur le dossier ouvert dans l'explorateur de fichiers. Ouvrez maintenant le dossier des packages et supprimez le dossier des packages manquant. Ouvrez Visual Studio et créez simplement la solution. tous les packages manquants seront restaurés. Veuillez marquer ceci comme réponse si j'ai aidé.

Sandip Jaiswal
la source
4

Je suppose que pour le projet asp.net 4, nous passons à la restauration automatique, il n'y a donc pas besoin de cela. 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

Luca Morelli
la source
Tu as probablement raison. J'ai juste essayé de créer le projet en utilisant exactement les mêmes étapes dans VS2013 et le "Activer la restauration du package Nuget" était là. Merci pour le lien, je vais le vérifier maintenant.
Dan Beaulieu
4

Cette approche a fonctionné pour moi:

  • Fermer VS2015
  • Ouvrez temporairement la solution dans VS2013 et activez la restauration du package nuget en cliquant avec le bouton droit sur la solution (j'ai également fait une reconstruction, mais je soupçonne que ce n'est pas nécessaire).
  • Fermer VS2013
  • Rouvrir la solution dans VS2015

Vous avez également activé la restauration des packages nuget dans VS2015.

Håkon Seljåsen
la source
4

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

J'ai regardé attentivement le message d'erreur et j'ai 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 l'explorateur Windows.
  • Copiez le dossier .nuget avec NuGet.Config, NuGet.exe, NuGet.targets ( lien de téléchargement ou simplement copier à partir d'un autre projet et remplacé)
  • Essayez de reconstruire la solution.

Prendre plaisir !!

Manoj Verma
la source
4

Ivan BranetsLa solution d' est essentiellement ce qui a résolu cela pour moi, mais quelques détails supplémentaires pourraient être partagés.

Dans mon cas, j'étais dans VS 2015 en utilisant la restauration automatique de packages et TFS . Ce sont des trucs assez 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. (Eh bien, je ne suis pas encore sûr.) Mais le dossier packages contenait un dossier pour la référence et le package NuGet, mais il n'était pas développé (disons qu'un dossier lib contenant un .dll était manquant.) Cette moitié là, mais pas vraiment le bon concept empêchait la restauration du paquet.

Vous le reconnaîtrez car la référence aura un point d'exclamation jaune pour ne pas être résolu.

Ainsi, la solution de suppression du dossier dans les packages supprime le problème de blocage de la restauration des packages. Ensuite, vous pouvez cliquer avec le bouton droit au niveau de la solution supérieure pour obtenir l'option de restauration des packages , et maintenant cela devrait fonctionner.

Greg
la source
4

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

Mandeep Janjua
la source
3

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 seul pour restaurer tous les packages de la solution. Voir Update-Package. Si vous le souhaitez, vous pouvez également réinstaller un seul package.

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

Andreas
la source
1

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 pendant que IIS intégré s'exécute en arrière-plan.

Katushai
la source
1

Dans le cas où quelqu'un d'autre trouverait 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 récupérera pas les paramètres s'il est ouvert par dossier. Cela se produit par défaut si vous utilisez les services en ligne de Visual Studio pour git.

Jack
la source
1

J'ai utilisé msbuild /t:restore.


Crédit et source:

Mon problème était avec MSBuild J'ai donc suivi le lien de @Vinney Kelly : Migration de solutions intégrées MSBuild vers la restauration automatique de packages

et...

Cela a fonctionné COMME UN CHARME =]

MSBuild : utilisez la msbuild /t:restorecommande, qui restaure les packages des packages répertoriés dans le fichier projet ( PackageReference uniquement). Disponible uniquement dans NuGet 4.x + et MSBuild 15.1+, qui sont inclus dans Visual Studio 2017 . nuget restoreet les dotnet restoredeux utilisent cette commande pour les projets applicables.

Yitzchak
la source
Dans mon cas / t: restore ne construit pas le projet pour lequel j'ai dû utiliser la commande / restore
Kishan Vaishnav
1

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

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

J'ai dû supprimer la fermeture et la réouverture du dossier des packages (VS2015). Je ne migrais pas et je n'avais pas de paquets archivés dans le contrôle de code source. Tout ce que je peux dire, c'est que quelque chose a été foiré et que cela a été corrigé.

Chris Hammons
la source
0

M'a aidé à l'aide des outils >>> Nuget Package Manager >>> Général, puis cochez l'option Autoriser Nuget à télécharger le package manquant et vérifier automatiquement les packages manquants lors de la construction dans Visual Studio .

entrez la description de l'image ici

Anjan Kant
la source
0

Pour les projets .NET Core , exécutez dotnet restoreou dotnet buildcommandez dansNuGet Package Manager Console (qui exécute automatiquement la restauration)

Vous pouvez exécuter la console à partir de

Outils> NuGet Package Manager> Package Manager Console

MOH3N
la source
0

Je suis confronté au même problème. J'essaie d'ajouter un projet MVC qui a été créé sur Visual Studio 2015 à une solution que j'ai faite sur Visual Studio 2019.

Il existe déjà des projets sur Visual Studio 2019, donc l'ajout de ce projet existant que j'ai créé sur VS 2015 déclenche cette même erreur. J'ai essayé toutes les réponses ici mais cela ne résout pas le problème.

J'ai simplement mis le dossier .nuget sur le dossier de la solution. À l'origine, la hiérarchie du dossier est la suivante:

Solution Folder (VS 2019)
  -> MVC 1 Project
  -> MVC 2 Project
  -> MVC 3 Project (Project that I am adding)
         -> .nuget folder (It contains a .nuget folder)

Le problème a donc été résolu lorsque j'ai déplacé le dossier .nuget sur le dossier de solution lui-même:

    Solution Folder (VS 2019)
  -> MVC 1 Project
  -> MVC 2 Project
  -> MVC 3 Project (Project that I am adding)
  -> .nuget folder (It contains a .nuget folder)
Willy David Jr
la source
0

VS 2019 version 16.4.4 Solution ciblant .NET Core 3.1

Après avoir essayé presque toutes les solutions proposées ici, j'ai fermé VS. Quand je l'ai rouvert, au bout de quelques secondes, tout était redevenu OK ...

Andrea Antonangeli
la source
-4

Encore plus simple, ajoutez un dossier .nuget à votre solution et le «Restore Nuget Packages» apparaîtra (vous ne savez pas si nuget.exe doit être présent pour que cela fonctionne).

Paxton
la source