Wie aktiviere ich die NuGet-Paketwiederherstellung in Visual Studio?

Es gibt einen ähnlichen Post auf dem Stapel, aber es hilft nicht mit meinem Problem möglicherweise, weil ich Visual Studio 2015 verwende.

Wie kann ich die Option “NuGet-Paketwiederherstellung aktivieren” in VS2015 anzeigen?

Ich wählte Datei> Neues Projekt und erstellte eine leere ASP.NET-Webanwendung . Ich suche nach dieser Menüoption.

Bildbeschreibung hier eingeben

Ich sollte erwähnen, dass ich in meinem Projektordner nach vorhandenen nuGet-Dateien gesucht habe, und es gibt keine.

Es hat viel zu lange gedauert, aber ich fand dieses Dokument zum Migrieren von integrierten MSBuild-Lösungen zur automatischen Paketwiederherstellung und konnte das Problem mit den hier beschriebenen Methoden lösen.

  1. Entfernen Sie das '.nuget' aus der Lösung
  2. Entfernen Sie alle Verweise auf nuget.targets aus Ihren .csproj oder .vbproj Dateien. Obwohl nicht offiziell unterstützt, verweist das Dokument auf ein PowerShell-Skript, wenn Sie viele Projekte haben, die bereinigt werden müssen. Ich habe meine von Hand manuell bearbeitet, so dass ich keine Rückmeldung über meine Erfahrungen damit geben kann.

Wenn Sie Ihre Dateien manuell bearbeiten, suchen Sie hier:

Lösungsdatei (.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 

Projektdatei (.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 hat die Unterstützung für die “NuGet-Paketwiederherstellung aktivieren” in VS2015 eingestellt und Sie müssen einige manuelle Änderungen vornehmen, um entweder alte Lösungen zu migrieren oder die function neuen Lösungen hinzuzufügen. Die neue function wird in NuGet Package Restore sehr gut beschrieben .

Es gibt auch einen Migrationsleitfaden für bestehende Projekte (wie bereits erwähnt) hier: NuGet Migration Guide

Beim Upgrade:

  1. Löschen Sie nicht das .nuget-Verzeichnis.
  2. Löschen Sie die Dateien nuget.exe und nuget.targets.
  3. Belassen Sie die Datei nugget.config.
  4. Bereinigen Sie jede der Projektdateien eines Verweises auf die NuGet-Ziele von Hand. Das erwähnte Powershell-Skript schien mehr Schaden als Nutzen anzurichten.

Beim Erstellen eines neuen Projekts:

  1. Erstellen Sie in Ihrer Visual Studio 2015-Lösung ein Lösungsverzeichnis namens .nuget.
  2. Erstellen Sie ein aktuelles Verzeichnis des Lösungsverzeichnisses (in dem die .sln-Datei gespeichert ist) und nennen Sie es .nuget (beachten Sie, dass das Lösungsverzeichnis nicht mit dem tatsächlichen Dateisystemverzeichnis identisch ist, obwohl sie den gleichen Namen haben).
  3. Erstellen Sie eine Datei im Verzeichnis .nuget namens nuget.config.

  4. Fügen Sie ‘nuget.config’ dem Lösungsverzeichnis hinzu, das in Schritt 2 erstellt wurde.

  5. Fügen Sie den folgenden Text in die Datei nuget.config ein:

    < ?xml version="1.0" encoding="utf-8"?>

Mit dieser Konfigurationsdatei können Sie alle Ihre Pakete an einem einzigen Ort konsolidieren, so dass nicht 20 verschiedene Kopien desselben Pakets auf Ihrem Dateisystem verfügbar sind. Der relative Pfad ändert sich abhängig von der Architektur des Lösungsverzeichnisses, sollte jedoch auf ein Verzeichnis verweisen, das allen Ihren Lösungen gemeinsam ist.

Sie müssen Visual Studio neu starten, nachdem Sie Schritt 5 ausgeführt haben. Nuget erkennt die Änderungen erst, wenn Sie dies tun.

Schließlich müssen Sie möglicherweise den Nuget-Paket-Manager für Lösungen verwenden, um die Pakete zu deinstallieren und dann erneut zu installieren. Ich weiß nicht, ob dies ein Nebeneffekt des Powershell-Skripts war, das ich ausgeführt habe, oder einfach eine Methode, um NuGet wieder in Gang zu bringen. Nachdem ich all diese Schritte ausgeführt hatte, funktionierte meine komplizierte Build-Architektur einwandfrei, indem ich neue Pakete herunterbrachte, wenn ich Projekte von TFVC überprüfte.

Optional können Sie alle Ordner aus dem Ordner “packages” entfernen und “NuGet Packages for Solution verwalten” auswählen. In diesem Fall erscheint die Schaltfläche “Wiederherstellen” auf NuGet Packages Windows.

Wenn Sie Probleme haben oder Pakete fehlen, klicken Sie einfach mit der rechten Maustaste in Ihr Projekt und wählen Sie ” NuGet-Pakete für die Lösung verwalten … “. Nachdem Sie darauf geklickt haben, öffnet sich ein Bildschirm, in dem Sie eine Menüleiste mit der Aufschrift “Restore” sehen: Wiederherstellen

Klicken Sie darauf und die erforderlichen Pakete werden automatisch installiert.
Ich glaube, das ist was du suchst, das hat meine Probleme getriggers.

Wenn Sie Projekte mit Nuget-Paketen von Vx20XX auf VS2015 aktualisieren, liegt möglicherweise ein Problem mit Nuget-Paketen vor.

Beispiel einer Fehlermeldung: Dieses Projekt verweist auf NuGet-Pakete, die auf diesem Computer fehlen. Aktivieren Sie die NuGet-Paketwiederherstellung, um sie herunterzuladen.

Update 2016-02-06: Ich hatte einen Link zu den Informationen, aber es funktioniert nicht mehr. Ich vermute, dass ein letzter Weg das Problem getriggers hat ???

Ich habe mein Problem behoben, indem ich ein kleines Programm geschrieben habe, das MSBuild-Integrierte Paketwiederherstellung und automatische Paketwiederherstellung ausführt

Sie können die ausführbare Datei des Tools hier herunterladen.

Bitte lass mich das Ergebnis wissen :-)!

Bildbeschreibung hier eingeben

Code als Referenz:

              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 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 elementsToRemove = new List(); 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"; } } } 

Wie bereits von Mike erwähnt, gibt es in VS2015 keine Option ‘NuGet Package Restore aktivieren’. Sie müssen den Wiederherstellungsvorgang manuell aufrufen. Ein guter Weg – ohne sich mit Dateien und Verzeichnissen herumzuschlagen – ist die Verwendung der NuGet Package Management Console : Klicken Sie in das Feld ‘Schnellstart’ (normalerweise in der oberen rechten Ecke), geben Sie die console , öffnen Sie die Managementkonsole und geben Sie folgenden Befehl ein:

 Update-Package –reinstall 

Dadurch werden alle Pakete aller Projekte in Ihrer Lösung neu installiert. Um ein einzelnes Projekt anzugeben, geben Sie Folgendes ein:

 Update-Package –reinstall -ProjectName MyProject 

Dies ist natürlich nur notwendig, wenn die Schaltfläche Restore – die manchmal von VS2015 angeboten wird – nicht verfügbar ist. Weitere nützliche Update-Befehle werden hier aufgelistet und erklärt: https://docs.microsoft.com/en-us/nuget/consume-packages/re-installing-and-updating-packages

Gehe zu Referenzen im Visual Studio und schau dir an, welche Pakete fehlen. Klicken Sie nun mit der rechten Maustaste auf Lösung in Visual und klicken Sie auf den geöffneten Ordner im Datei-Explorer. Öffnen Sie nun den Paketordner und löschen Sie den fehlenden Paketordner. Öffnen Sie Visual Studio und bauen Sie einfach die Lösung. Alle fehlenden Pakete werden wiederhergestellt. Bitte markieren Sie diese als Antwort, wenn ich geholfen habe.

Ich nehme an, dass wir für asp.net 4 Projekt auf automatische Wiederherstellung umziehen, also gibt es keine Notwendigkeit dafür. Für ältere Projekte denke ich, dass ein bisschen Arbeit zum Konvertieren nötig ist.

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

Dieser Ansatz hat für mich funktioniert:

  • Schließen VS2015
  • Öffnen Sie die Lösung vorübergehend in VS2013 und aktivieren Sie die Wiederherstellung des Nuget-Pakets, indem Sie mit der rechten Maustaste auf die Lösung klicken (ich habe auch eine Neuerstellung durchgeführt, aber ich vermute, dass diese nicht benötigt wird).
  • Schließen VS2013
  • Öffnen Sie die Lösung in VS2015 erneut

Sie haben nun auch die Nuget-Paketwiederherstellung in VS2015 aktiviert.

Beim Versuch, das Beispielprojekt gplus-quickstart-csharp-master zu erstellen, stieß ich auf das gleiche Problem.

Ich habe genau die Fehlermeldung gelesen und eine Lösung gefunden, um diesen Fehler zu beheben, hoffentlich wird dies helfen.

  • Klicken Sie mit der rechten Maustaste auf die Lösungsdatei und öffnen Sie sie im Windows Explorer.
  • Kopieren Sie den .nuget- Ordner mit NuGet.Config, NuGet.exe, NuGet.targets (Download- Link oder einfach kopieren von anderen Projekt und ersetzt)
  • Versuchen Sie, die Lösung neu zu erstellen.

Genießen !!

Die Lösung von Ivan Branets ist im Wesentlichen das, was das für mich behoben hat, aber einige Details könnten geteilt werden.

In meinem Fall war ich in VS 2015 mit Auto Package Restore und TFS . Das ist alles ziemlich Standard-Zeug.

Das Problem bestand darin, dass einige andere Pakete nicht vollständig wiederhergestellt wurden, als ein anderer Entwickler versuchte, eine Lösung von TFS zu erhalten. (Warum, das weiß ich noch nicht ganz genau.) Aber der Paketordner enthielt einen Ordner für die Referenz und das NuGet-Paket, aber es wurde nicht erweitert (ein lib-Ordner mit einer .dll fehlte). Diese Hälfte da, aber nicht wirklich ganz richtig Konzept verhindert das Paket wiederhergestellt werden.

Sie werden dies erkennen, weil die Referenz ein gelbes Ausrufezeichen hat, um nicht aufgetriggers zu werden.

Die Lösung, den Ordner innerhalb von Paketen zu löschen, beseitigt das Problem der Blockierung der Paketwiederherstellung. Dann können Sie mit der rechten Maustaste auf die oberste Lösungsebene klicken , um die Option zum Wiederherstellen von Paketen zu erhalten , und jetzt sollte es funktionieren.

Schließen VS. Alles unter dem Paketordner löschen Öffnen Sie Ihre Lösung erneut. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie ‘nuget packages verwalten …’. Im Fenster ‘Nuget Package Manager’ wird eine gelbe Leiste angezeigt, in der Sie aufgefordert werden, die Pakete wiederherzustellen. Das hat für mich funktioniert.

Package Manager-Konsole (Visual Studio, Tools> NuGet-Paket-Manager> Package Manager Console): Führen Sie den Befehl Update-Package -install -ProjectName aus, wobei der Name des betroffenen Projekts im Solution Explorer angezeigt wird. Verwenden Sie Update-Package -reinstall, um alle Pakete in der Lösung wiederherzustellen. Siehe Update-Paket. Sie können bei Bedarf auch ein einzelnes Paket neu installieren.

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

Könnte auch ein Ergebnis der Ausführung des Programms sein, während Sie versuchen, das Paket zu installieren. Es ist ausgegraut, wenn Sie versuchen, auf es zu klicken, während das integrierte IIS im Hintergrund ausgeführt wird.

Ich musste den Paketordner schließen und die Lösung (VS2015) erneut öffnen. Ich bin nicht migriert und habe keine Pakete in die Quellcodeverwaltung eingecheckt. Alles, was ich sagen kann, ist etwas durcheinander gebracht und das hat es behoben.

Falls jemand anderes dieses Problem in Visual Studio 2017 findet, stellen Sie sicher, dass das Projekt von der .sln-Datei und nicht vom Ordner geöffnet wird, da Visual Studio die Einstellungen nicht annimmt, wenn es von einem Ordner geöffnet wird. Dies geschieht standardmäßig, wenn Sie Visual Studio-Onlinedienste für Git verwenden.

Ich habe msbuild /t:restore .

Mein Problem war mit MSBuild So folgte ich @ Viney Kelly Link: Migrieren von MSBuild-integrierte Lösungen zu Automatic Package Restore

und…

Das funktionierte wie ein Charme =]

MSBuild : Verwenden Sie den msbuild /t:restore , mit dem msbuild /t:restore in der Projektdatei (nur PackageReference ) wiederhergestellt werden. Nur in NuGet 4.x + und MSBuild 15.1+ verfügbar, die in Visual Studio 2017 enthalten sind . nuget restore und dotnet restore verwenden diesen Befehl für entsprechende Projekte.

Hat mir geholfen über Tools >>> Nuget Package Manager >>> Allgemein und dann die Option Erlaube Nuget das fehlende Paket herunterzuladen und automatisch nach fehlenden Paketen während des Build in Visual Studio zu suchen .

Bildbeschreibung hier eingeben

Noch einfacher: Fügen Sie Ihrer Lösung einen .nuget-Ordner hinzu, und das Fenster ‘Nuget-Pakete wiederherstellen’ wird angezeigt (nicht sicher, ob nuget.exe vorhanden sein muss, damit es funktioniert).