Wie aktiviere ich die NuGet-Paketwiederherstellung in Visual Studio?

272

Es gibt einen ähnlichen Beitrag auf dem Stapel, aber er hilft möglicherweise nicht bei meinem Problem, da ich Visual Studio 2015 verwende.

Wie kann die Option "NuGet-Paketwiederherstellung aktivieren" in VS2015 angezeigt werden?

Ich habe Datei> Neues Projekt gewählt und eine leere ASP.NET-Webanwendung erstellt . Ich suche diese Menüoption.

Geben Sie hier die Bildbeschreibung ein

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

Dan Beaulieu
quelle
4
Stellen Sie sicher, dass Sie dies gegen Ihre Lösung und nicht gegen das Webprojekt versuchen. Standardmäßig wird die Lösung nicht angezeigt, wenn nur ein Projekt vorhanden ist
JConstantine
1
Ja, das ist definitiv ein leichter Fehler, aber ich habe darauf geachtet, die Lösung zu überprüfen. Ich denke, es könnte mit 2015 zusammenhängen. Die Option Aktivieren ist in VS2013 verfügbar, wenn ich die gleichen Schritte ausführe.
Dan Beaulieu
2
Hier gilt das gleiche. Ich habe sogar versucht, den Ordner .nuget zu löschen, der die Option NuGet-Paketwiederherstellung aktivieren in VS 2013 reaktiviert, aber immer noch keine Würfel. Ich versuche, eine vorhandene MVC-Anwendung zu öffnen, die in VS 2013 erstellt wurde.
Vinney Kelly
4
@justanotherdev Es wäre nützlich, wenn Sie einen Verweis auf den neuen Workflow angeben würden, um Ihren Kommentar etwas produktiver zu gestalten.
Avantprime
1
Ich hatte David Ebbos Artikel, auf den Oligofren verweist, nicht gesehen, also habe ich einfach die sln & csproj-Dateien in Notepad ++ geöffnet und die von ihm illustrierten Abschnitte gelöscht. Ich hatte die Lösung in VS2015 geöffnet und nachdem ich die Dateien gespeichert hatte, forderte VS mich auf, sie neu zu laden. Meine Lösungsreferenzen sind jetzt in Ordnung und meine Lösung wird kompiliert. Vielen Dank, Vinney!
Rich Ward

Antworten:

248

Es hat viel zu lange gedauert, aber ich habe endlich dieses Dokument über die Migration von MSBuild-integrierten Lösungen zur automatischen Paketwiederherstellung gefunden und konnte das Problem mit den hier beschriebenen Methoden beheben.

  1. Entfernen Sie das '.nuget'Lösungsverzeichnis aus der Lösung
  2. Entfernen Sie alle Verweise auf nuget.targetsaus Ihren .csprojoder .vbprojDateien. Obwohl das Dokument nicht offiziell unterstützt wird, wird es mit einem PowerShell-Skript verknüpft, wenn Sie viele Projekte haben, die bereinigt werden müssen. Ich habe meine manuell von Hand bearbeitet, sodass ich keine Rückmeldung zu meinen Erfahrungen damit geben kann.

Wenn Sie Ihre Dateien von Hand bearbeiten, suchen Sie Folgendes:

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)

  <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
quelle
3
Mir fehlt hier total etwas. Wenn ich diese Methode verwende, wird in jeder meiner Lösungen eine Schiffsladung Pakete installiert. Ich habe eine Lösung mit 10 Paketen und eine andere Lösung mit genau denselben Paketen: Es werden zwei verschiedene Verzeichnisse erstellt, die jeweils die 10 Pakete enthalten. Wie konsolidieren Sie mit dieser Methode alle Ihre Pakete in einem einzigen Verzeichnis (wie es die alte VS2013-Methode durch Bearbeiten der Datei NuGet.Config ermöglicht)?
Quarkly
Sie sehen keinen .nuget-Ordner? Schauen Sie sich die Lösungen zum Löschen von Ordnern im Paketordner an. Es ist möglich, dass Ihr Paket zur Hälfte wiederhergestellt wurde und dieser Müll die vollständige Wiederherstellung verhindert.
Greg
In der Tat war dies die Lösung. Zusätzlich dazu habe ich "Nuget Restore" hinzugefügt, bevor ich mit dem Erstellen des Projekts beginne. Nuget-Pakete werden automatisch heruntergeladen, und die Projekterstellung funktioniert danach einwandfrei.
TarmoPikaro
5
Um ein wenig Zeit zu sparen, ist das Skript, das aus dem von @VinneyKelly erwähnten GitHub-Repository ausgeführt werden soll, migrateToAutomaticPackageRestore.ps1, seine Magie, funktioniert!
Riga
60

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 Funktion neuen Lösungen hinzuzufügen. Die neue Funktion wird in NuGet Package Restore ziemlich gut beschrieben .

Hier finden Sie auch einen Migrationsleitfaden für vorhandene Projekte (wie bereits erwähnt): NuGet-Migrationsleitfaden

Beim Upgrade:

  1. Löschen Sie nicht das .nuget-Verzeichnis.
  2. Löschen Sie die Dateien nuget.exe und nuget.targets.
  3. Verlassen Sie die Datei nuget.config.
  4. Löschen Sie jede Projektdatei von Hand von Verweisen auf die NuGet-Ziele. Das erwähnte Powershell-Skript schien mehr Schaden als Nutzen zu verursachen.

Beim Erstellen eines neuen Projekts:

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

  4. Fügen Sie die 'nuget.config' zu dem in Schritt 2 erstellten Lösungsverzeichnis hinzu.

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

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

Mit dieser Konfigurationsdatei können Sie alle Ihre Pakete an einem einzigen Ort konsolidieren, sodass Sie nicht 20 verschiedene Kopien desselben Pakets in Ihrem Dateisystem haben. Der relative Pfad ändert sich abhängig von Ihrer Lösungsverzeichnisarchitektur, sollte jedoch auf ein Verzeichnis verweisen, das allen Ihren Lösungen gemeinsam ist.

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

Schließlich müssen Sie möglicherweise den 'Nuget Package Manager for Solutions' verwenden, um die Pakete zu deinstallieren und anschließend erneut zu installieren. Ich weiß nicht, ob dies ein Nebeneffekt des von mir ausgeführten Powershell-Skripts war oder nur eine Methode, um NuGet wieder in Gang zu bringen. Nachdem ich alle diese Schritte ausgeführt hatte, funktionierte meine komplizierte Build-Architektur einwandfrei, um neue Pakete herunterzufahren, wenn ich Projekte aus TFVC auscheckte.

Quarkly
quelle
1
Warum die Datei nuget.targets löschen? Erhalte ich einen konsistenten Build, wenn dieser fehlt?
Frode Nilsen
1
Die Ziele scheinen jetzt in die IDE integriert zu sein, ebenso wie die Funktion, die die 'nugget.exe' verwendet hat. Das einzige, was Sie noch brauchen, ist die Konfiguration.
Quarkly
1
Zusätzlich zu den von DRAirey erwähnten Schritten musste ich Folgendes tun: 1) Anstelle von $ \ .. \ .. \ .. \ .. \ Paketen, verwendet ../../ (Windows-übergeordnete Pfadkonvention, Nr $ am Anfang 2) Speichern Sie die Lösung, schließen Sie sie und öffnen Sie sie erneut, damit die Datei nuget.config von der Paketinstallation gelesen und
berücksichtigt wird
Dies half bei meinem neuen VS2015-Projekt, bei dem ich Pakete dir festgelegt habe und andere Teammitglieder aufgrund von NuGet-Abhängigkeiten nicht neu erstellt werden konnten.
azec-pdx
1
Sie müssen Visual Studio nach Schritt 5 neu starten. Nuget erkennt die Änderungen erst, wenn Sie dies tun.
Barry Colebank Jr.
35

Optional können Sie alle Ordner aus dem Ordner "Pakete" entfernen und "NuGet-Pakete für Lösung verwalten ..." auswählen. In diesem Fall wird unter NuGet Packages Windows die Schaltfläche "Wiederherstellen" angezeigt.

Ivan Branets
quelle
1
Versuchen Sie, das NuGet-Paketfenster zu schließen und erneut zu öffnen, nachdem Sie Ordner im Ordner "packages" entfernt haben.
Ivan Branets
6
+1 Dies hat bei mir funktioniert. Beachten Sie, dass die Schaltfläche zum Wiederherstellen oben im Fenster direkt unter der Registerkarte angezeigt wird. Dazu: "Einige NuGet-Pakete fehlen in dieser Lösung. Klicken Sie hier, um sie aus Ihren Online-Paketquellen wiederherzustellen."
Eruza
So einfach und leicht ... das hat bei mir funktioniert ... Ich denke, das sollte mehr als eine Antwort sein :)
Nirman
So einfach und leicht. Dies sollte die Antwort sein.
Axel
Wäre es nicht eine gute Idee, diesen Ordner zur .gitignore-Datei hinzuzufügen?
Axel
26

Wie bereits von Mike erwähnt, gibt es in VS2015 keine Option 'NuGet Package Restore aktivieren'. Sie müssen den Wiederherstellungsprozess manuell aufrufen. Eine gute Möglichkeit - ohne mit Dateien und Verzeichnissen herumzuspielen - ist die Verwendung der NuGet Package Management Console : Klicken Sie in das Feld "Schnellstart" (normalerweise in der oberen rechten Ecke), geben Sie ein console, öffnen Sie die Verwaltungskonsole und geben Sie den folgenden Befehl ein:

Update-Package reinstall

Dadurch werden alle Pakete aller Projekte in Ihrer Lösung erneut installiert. Geben Sie Folgendes ein, um ein einzelnes Projekt anzugeben:

Update-Package reinstall -ProjectName MyProject

Dies ist natürlich nur erforderlich, wenn die RestoreSchaltfläche - manchmal von VS2015 angeboten - nicht verfügbar ist. Weitere nützliche Aktualisierungsbefehle werden hier aufgelistet und erläutert: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

Jack Miller
quelle
Vielen Dank, ich hatte das ähnliche Problem. Ich habe mein Problem gerade über Ihr Verfahren gelöst. Vielen Dank
McElie
Das Gleiche gilt für den einzigen, der funktioniert hat und nicht viele Dinge benötigt, die überall geschrieben wurden
Harvey Lin,
Die nützlichste Antwort hier!
Neo
13

Wenn Sie Probleme haben oder Pakete vermissen, klicken Sie einfach mit der rechten Maustaste in Ihr Projekt und wählen Sie " NuGet-Pakete für Lösung verwalten ... ". Nachdem Sie darauf geklickt haben, wird ein Bildschirm geöffnet, in dem eine Menüleiste mit der Aufschrift "Wiederherstellen" angezeigt wird: Wiederherstellen

Klicken Sie darauf und die erforderlichen Pakete werden automatisch installiert.
Ich glaube, das ist es, wonach du suchst, das hat meine Probleme gelöst.

Yenthe
quelle
3
Aber das hilft nur, wenn diese Warnleiste angezeigt wird, in meinem Fall nicht.
Nicholas Petersen
2
Ein Schritt, bei dem ein Paket manuell installiert wird, verfehlt den Punkt einer automatisierten Wiederherstellung vollständig.
Quarkly
Ich glaube, dies sollte wahrscheinlich die akzeptierte Antwort sein, es ist die gleiche Funktionalität
user25064
1
Ich konnte die Option zum Wiederherstellen sehen, indem ich mit der rechten Maustaste auf die Lösung klickte. Es war dort unter "NuGet-Pakete für Lösung verwalten". Hat den Trick für mich gemacht.
Daryl
1
Funktioniert bei mir nicht - Ich sehe in der Lösung Warnungen bezüglich fehlender Nuget-Pakete, aber die Verwaltung von Nuget-Paketen bietet mir keine Option zum Herunterladen. Ich kann auch nicht bauen und wiederherstellen. Auch der Wiederherstellungsbefehl bewirkt nichts.
Markus
7

Verwenden Sie diesen Befehl, um alle Pakete wiederherzustellen

dotnet restore
Abdus Salam Azad
quelle
Funktioniert perfekt
JP..t
6

Beim Aktualisieren von Projekten mit Nuget-Paketen von Vx20XX auf VS2015 liegt möglicherweise ein Problem mit Nuget-Paketen vor.

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

Update 06.02.2016: Ich hatte einen Link zu den Informationen, aber es funktioniert nicht mehr. Ich vermute, dass ein neuer Weg das Problem gelöst hat ???

Ich habe mein Problem beim Schreiben eines kleinen Programms behoben, das eine MSBuild-integrierte Paketwiederherstellung im Vergleich zur automatischen Paketwiederherstellung ausführt

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

Bitte lassen Sie mich das Ergebnis wissen :-)!

Geben Sie hier die Bildbeschreibung ein

Code als Referenz:

<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
quelle
Das Programm hat gut funktioniert, um eine Menge Projekte in meine Lösung zu konvertieren. Die neueste Version hat auch ein Feld "Verzeichnis der NuGet-Pakete", schien aber die Ausgabe nicht zu beeinflussen. Was tut es?
Christoffer Årstrand
Entschuldigung, ich habe keine Ahnung. Ich vermute, dass es vom Inhalt der Datei abhängt. Vielleicht können Sie die Funktion "FromProjectFileRemoveNugetTargets" verfolgen und prüfen, ob Ihre Datei betroffen sein könnte? Entschuldigung für diese schlechte Antwort, ich erinnere mich nicht, was ich codiert habe :-(! Ich weiß nur, dass ich zweimal auf 2 verschiedenen Computern mit Erfolg verwendet habe.
Eric Ouellet
5

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

Sandip Jaiswal
quelle
4

Ich nehme an, dass wir für das asp.net 4-Projekt auf die automatische Wiederherstellung umsteigen, sodass dies nicht erforderlich ist. Für ältere Projekte denke ich, dass ein bisschen Arbeit zum Konvertieren erforderlich ist.

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

Luca Morelli
quelle
Du hast wahrscheinlich Recht. Ich habe gerade versucht, das Projekt mit genau den gleichen Schritten in VS2013 zu erstellen, und die "Enable Nuget Package Restore" war da. Danke für den Link, ich werde es jetzt überprüfen.
Dan Beaulieu
4

Dieser Ansatz hat bei mir funktioniert:

  • Schließen Sie 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 dies nicht erforderlich ist).
  • Schließen Sie VS2013
  • Öffnen Sie die Lösung in VS2015 erneut

Sie haben jetzt die Wiederherstellung von Nuget-Paketen auch in VS2015 aktiviert .

Håkon Seljåsen
quelle
4

Beim Versuch, ein Beispielprojekt gplus-quickstart-csharp-master zu erstellen, trat das gleiche Problem auf .

Ich habe mir die Fehlermeldung genau angesehen und eine Problemumgehung gefunden, um diesen Fehler zu beheben. Hoffentlich hilft dies.

  • 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 aus einem anderen Projekt kopieren und ersetzen)
  • Versuchen Sie, die Lösung neu zu erstellen.

Genießen !!

Manoj Verma
quelle
4

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

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

Das Problem war, dass einige Pakete nicht vollständig wiederhergestellt wurden, als ein anderer Entwickler versuchte, eine Lösung von TFS zu erhalten. (Ich bin mir noch nicht ganz sicher.) Der Paketordner enthielt jedoch einen Ordner für die Referenz und das NuGet-Paket, wurde jedoch nicht erweitert (beispielsweise fehlte ein lib-Ordner mit einer DLL.) Diese Hälfte dort, aber nicht ganz richtig Konzept war die Verhinderung der Wiederherstellung des Pakets.

Sie erkennen dies daran, dass die Referenz ein gelbes Ausrufezeichen hat, wenn sie nicht aufgelöst wird.

Die Lösung zum Löschen des Ordners in Paketen beseitigt also 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 . Jetzt sollte es funktionieren.

Greg
quelle
4

Schließen Sie VS. Löschen Sie alles im Paketordner. Öffnen Sie Ihre Lösung erneut. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Nuget-Pakete verwalten ...". Oben im Fenster "Nuget Package Manager" wird ein gelber Balken angezeigt, in dem Sie aufgefordert werden, Pakete wiederherzustellen. Das hat bei mir funktioniert.

Mandeep Janjua
quelle
3

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

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

Andreas
quelle
1

Dies kann auch auf das Ausführen des Programms zurückzuführen sein, während Sie versuchen, das Paket zu installieren. Es ist ausgegraut, wenn Sie versuchen, darauf zu klicken, während der integrierte IIS im Hintergrund ausgeführt wird.

Katushai
quelle
1

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

Jack
quelle
1

Führen Sie für .NET Core-Projekte aus dotnet restoreoder dotnet buildbefehlen Sie inNuGet Package Manager Console (wodurch die Wiederherstellung automatisch ausgeführt wird).

Sie können die Konsole von ausführen

Extras> NuGet Package Manager> Package Manager-Konsole

MOH3N
quelle
1

Ich habe benutzt msbuild /t:restore.


Kredit und Quelle:

Mein Problem war mit MSBuild. Also folgte ich dem Link von @Vinney Kelly : Migration von MSBuild-integrierten Lösungen zur automatischen Paketwiederherstellung

und...

Das hat funktioniert wie ein Charme =]

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

Yitzchak
quelle
In meinem Fall / t: restore erstellt nicht das Projekt, für das ich den Befehl / restore verwenden musste
Kishan Vaishnav
1

Wenn alles andere fehlschlägt (oder vielleicht vorher), möchten Sie möglicherweise überprüfen, ob NuGet eine Paketquelle ist. Ich habe VS2017 installiert und es war standardmäßig NICHT da. Ich fand es irgendwie seltsam.

  1. Tools - NuGet Package Manager - Paketmanager-Einstellungen
  2. Klicken Sie links im Dialogfeld auf "Paketquellen".
  3. Verwenden Sie das Pluszeichen (+), um die Nuget-URL hinzuzufügen: https://api.nuget.org/v3/index.json
douglas.kirschman
quelle
0

Ich musste die Paketordnerlösung entfernen und erneut öffnen (VS2015). Ich habe nicht migriert und keine Pakete in die Quellcodeverwaltung eingecheckt. Alles was ich sagen kann ist, dass etwas durcheinander gebracht wurde und dies das Problem behoben hat.

Chris Hammons
quelle
0

Hat mir durch Tools geholfen >>> Nuget Package Manager >>> Allgemein, dann aktivieren Sie die Option Nuget erlauben, fehlende Pakete herunterzuladen und beim Erstellen in Visual Studio automatisch nach fehlenden Paketen zu suchen .

Geben Sie hier die Bildbeschreibung ein

Anjan Kant
quelle
0

Ich stehe vor dem gleichen Problem. Ich versuche, ein MVC-Projekt, das in Visual Studio 2015 erstellt wurde, zu einer Lösung hinzuzufügen, die ich in Visual Studio 2019 erstellt habe.

In Visual Studio 2019 sind bereits Projekte vorhanden. Wenn Sie also dieses vorhandene Projekt hinzufügen, das ich in VS 2015 erstellt habe, wird derselbe Fehler ausgelöst. Ich habe alle Antworten hier ausprobiert, aber das Problem wird dadurch nicht behoben.

Ich habe nur den Ordner .nuget in den Lösungsordner gelegt. Ursprünglich lautet die Hierarchie des Ordners wie folgt:

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)

Das Problem wurde behoben, als ich den .nuget-Ordner in den Lösungsordner selbst verschob:

    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.
quelle
0

VS 2019 Version 16.4.4 Lösungsziel für .NET Core 3.1

Nachdem ich fast alle hier vorgeschlagenen Lösungen ausprobiert hatte, schloss ich VS. Als ich es wieder öffnete, war nach einigen Sekunden alles wieder in Ordnung ...

Andrea Antonangeli
quelle
-4

Noch einfacher ist es, wenn Sie Ihrer Lösung einen .nuget-Ordner hinzufügen. Daraufhin wird "Nuget-Pakete wiederherstellen" angezeigt (nicht sicher, ob nuget.exe vorhanden sein muss, damit es funktioniert).

Paxton
quelle