Comment activer la restauration de package NuGet dans Visual Studio?

Il y a un article similaire sur la stack, mais cela ne m’aide peut-être pas car j’utilise Visual Studio 2015.

Comment faire pour que l’option “Activer NuGet Package Restore” apparaisse dans VS2015?

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

entrer la description de l'image ici

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

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

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

Lorsque vous éditez 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)

     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}.    

Microsoft a cessé de prendre en charge la fonction «Activer la restauration de package NuGet» dans VS2015 et vous devez apporter des modifications manuelles pour migrer d’anciennes solutions ou append cette fonctionnalité à de 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): 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. Purger chacun des fichiers de projet de toute référence aux cibles NuGet à la main. 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. 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 ont 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"?>

Ce fichier de configuration vous permettra de consolider tous vos paquets en un seul endroit afin que vous n’ayez pas 20 copies différentes du même paquet sur votre système de fichiers. Le chemin d’access 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 jusqu’à ce que vous le fassiez.

Enfin, vous devrez peut-être utiliser le «Gestionnaire de packages Nuget pour 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 couru ou juste une méthode pour remettre NuGet dans la vitesse. Une fois toutes ces étapes effectuées, mon architecture de construction compliquée a parfaitement fonctionné pour éliminer les nouveaux paquets lorsque j’ai vérifié les projets de TFVC.

Vous pouvez éventuellement supprimer tous les dossiers du dossier “packages” et sélectionner “Manage NuGet Packages for Solution …”. Dans ce cas, le bouton “Restaurer” apparaît sur NuGet Packages Windows.

Si vous rencontrez des problèmes ou si des paquets vous manquent, vous pouvez simplement cliquer avec le bouton droit de la souris 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 paquets requirejs seront installés automatiquement.
Je crois que c’est ce que vous recherchez, cela a résolu mes problèmes.

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

Exemple de message d’erreur: Ce projet fait référence à des 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 l’information mais cela ne fonctionne plus. Je pense qu’un chemin récent a résolu le problème ???

J’ai corrigé mon problème en écrivant un petit programme qui fait la restauration du paquet MSBuild-Integrated vs Restauration automatique du paquet

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

S’il vous plaît laissez-moi savoir le résultat 🙂 !

entrer la description de l'image ici

Code comme référence:

              Root directory of projects               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; ///  /// 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 ///  namespace FixNuGetProblemsInVs2015 { ///  /// Interaction logic for MainWindow.xaml ///  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 ssortingng _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 = ""; ssortingng 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(ssortingng dirProjects, bool revert = false) { if (revert) { Revert(dirProjects); } else { FixFolder(dirProjects); } foreach (ssortingng subfolder in Directory.EnumerateDirectories(dirProjects)) { RecurseFolder(subfolder, revert); } } private const ssortingng BackupSuffix = ".fix_nuget_backup"; private void Revert(ssortingng dirProject) { foreach (ssortingng filename in Directory.EnumerateFiles(dirProject)) { if (filename.ToLower().EndsWith(BackupSuffix)) { ssortingng original = filename.Subssortingng(0, filename.Length - BackupSuffix.Length); if (File.Exists(original)) { File.Delete(original); } File.Move(filename, original); Log("File reverted: " + filename + " ==> " + original); } } } private void FixFolder(ssortingng dirProject) { BackupFile(System.IO.Path.Combine(dirProject, "nuget.targets")); BackupFile(System.IO.Path.Combine(dirProject, "nuget.exe")); foreach (ssortingng filename in Directory.EnumerateFiles(dirProject)) { if (filename.ToLower().EndsWith(".csproj")) { FromProjectFileRemoveNugetTargets(filename); } } } private void BackupFile(ssortingng path) { if (File.Exists(path)) { ssortingng 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(ssortingng prjFilename) { XDocument xml = XDocument.Load(prjFilename); List elementsToRemove = new List(); foreach (XElement element in xml.Descendants()) { if (element.Name.LocalName == "Import") { var att = element.Atsortingbute("Project"); if (att != null) { if (att.Value.Contains("NuGet.targets")) { elementsToRemove.Add(element); } } } if (element.Name.LocalName == "Target") { var att = element.Atsortingbute("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(ssortingng msg) { TxtLog.Text += msg + "\r\n"; } } } 

Comme déjà mentionné par Mike, il n’y a pas d’option ‘Activer NuGet Package Restore’ dans VS2015. Vous devrez appeler le processus de restauration manuellement. Un bon moyen – sans jouer avec les fichiers et les répertoires – consiste à utiliser la console de gestion de paquets 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 commande:

 Update-Package –reinstall 

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

 Update-Package –reinstall -ProjectName MyProject 

Bien entendu, cela n’est nécessaire que lorsque le bouton Restoreparfois 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

Aller à Références dans Visual Studio et regarder quels paquets sont manquants. Cliquez maintenant avec le bouton droit sur Solution in Visual et cliquez sur Ouvrir le dossier dans l’explorateur de fichiers. Maintenant, ouvrez le dossier packages et supprimez le dossier des paquets manquants. Ouvrez Visual Studio et construisez simplement la solution. tous les paquets manquants seront restaurés. S’il vous plaît marquer ceci comme réponse si j’ai aidé.

Je suppose que pour le projet asp.net 4 nous passons à la restauration automatique, donc ce n’est 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

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 effectué une reconstruction, mais je suppose que cela n’est pas nécessaire).
  • Fermer VS2013
  • Rouvrez la solution dans VS2015

Vous avez maintenant activé la restauration du package nuget dans VS2015.

J’ai rencontré le même problème en essayant de générer un exemple de projet gplus-quickstart-csharp-master .

J’ai regardé de près le message d’erreur et trouvé une solution de rechange 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.
  • Copier 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 !!

La solution d’ Ivan Branets est essentiellement ce qui a résolu ce problème pour moi, mais d’autres détails pourraient être partagés.

Dans mon cas, j’étais dans VS 2015 en utilisant la restauration automatique et TFS . C’est tout ce qui est joli par défaut.

Le problème était que lorsqu’un autre développeur essayait d’obtenir une solution à partir de TFS, certains paquets n’étaient pas complètement 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 n’a pas été développé (un dossier lib contenant un fichier .dll manquait.) là, mais pas tout à fait raison concept empêchait le paquet d’être restauré.

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

Ainsi, la solution consistant à supprimer le dossier dans les packages supprime le problème de blocage de la restauration du package. Vous pouvez ensuite cliquer avec le bouton droit de la souris au niveau de la solution la plus élevée pour pouvoir restaurer les packages , et cela devrait maintenant fonctionner.

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

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 concerné tel qu’il apparaît dans l’Explorateur de solutions. Utilisez Update-Package -reinstall par lui-même pour restaurer tous les packages de la solution. Voir Update-Package. Vous pouvez également réinstaller un seul paquet si vous le souhaitez.

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

Pourrait également être le résultat 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 système IIS intégré est exécuté en arrière-plan.

Je devais supprimer les dossiers fermant et ré-ouvrant la solution (VS2015). Je ne migrais pas et je n’avais pas vérifié les paquets dans le contrôle de source. Tout ce que je peux dire, c’est que quelque chose a été gâché et cela a résolu le problème.

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 le dossier, car Visual Studio n’acceptera pas les parameters s’il est ouvert par dossier. Cela se produit par défaut si vous utilisez les services en ligne Visual Studio pour git.

J’ai utilisé msbuild /t:restore .

Mon problème était avec MSBuild J’ai donc suivi le lien de @Vinney Kelly : Migration des solutions MSBuild-Integrated vers la restauration automatique des paquets

et…

Cela a fonctionné COMME UN CHARME =]

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

M’a aidé à travers Outils >>> Nuget Package Manager >>> Général, puis cochez l’option Autoriser Nuget à télécharger les paquets manquants et à vérifier automatiquement les paquets manquants lors de la création de Visual Studio .

entrer la description de l'image ici

Encore plus simple, ajoutez un dossier .nuget à votre solution et les “Restore Nuget Packages” apparaîtront (vous ne savez pas si nuget.exe doit être présent pour qu’il fonctionne).