it-swarm.com.de

Wie aktiviere ich die NuGet-Paketwiederherstellung in Visual Studio?

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

Wie bekomme ich die Option "NuGet Package Restore aktivieren" in VS2015 angezeigt?

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

enter image description here

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

244
Dan Beaulieu

Es dauerte viel zu lange, aber schließlich fand ich dieses Dokument unter Migration von MSBuild-Integrated-Lösungen zur automatischen Wiederherstellung von Paketen und ich konnte das Problem mit den hier beschriebenen Methoden lösen. 

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

Wenn Sie Ihre Dateien von Hand bearbeiten, suchen Sie nach folgenden Elementen:

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>
232
Vinney Kelly

Microsoft hat die Unterstützung für "NuGet Package Restore aktivieren" in VS2015 eingestellt und Sie müssen einige manuelle Änderungen vornehmen, um alte Lösungen zu migrieren oder die Funktion neuen Lösungen hinzuzufügen. Die neue Funktion wird in NuGet Package Restore ziemlich gut beschrieben.

Es gibt auch einen Migrationsleitfaden für vorhandene Projekte (wie zuvor erwähnt) hier: 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 nuget.config.
  4. Bereinigen Sie jede Projektdatei manuell von jeder Referenz auf die NuGet-Ziele. Das erwähnte Powershell-Skript schien mehr Schaden als Gutes 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 aktuelles Verzeichnis des Lösungsverzeichnisses (wo 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 im .nuget-Verzeichnis eine Datei mit dem Namen nuget.config.

  4. Fügen Sie dem in Schritt 2 erstellten Lösungsverzeichnis die Datei 'nuget.config' 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, so dass Sie nicht 20 verschiedene Kopien desselben Pakets in Ihrem Dateisystem haben. Der relative Pfad ändert sich in Abhängigkeit von der Architektur Ihres Lösungsverzeichnisses. Er sollte jedoch auf ein Verzeichnis verweisen, das allen Ihren Lösungen gemeinsam ist.

Sie müssen Visual Studio nach Schritt 5 erneut 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 Powershell-Skripts war oder nur eine Methode, um NuGet wieder in Gang zu bringen. Nachdem ich all diese Schritte ausgeführt hatte, funktionierte meine komplizierte Build-Architektur einwandfrei, um neue Pakete herunterzufahren, als ich Projekte aus TFVC auscheckte.

57
Donald Airey

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" in NuGet Packages Windows. 

31
Ivan Branets

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 Lösung verwalten ... ". Nachdem Sie darauf geklickt haben, öffnet sich ein Bildschirm, in dem Sie eine Menüleiste mit der Aufschrift "Wiederherstellen" sehen.Restore

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

12
Yenthe

Wie bereits von Mike erwähnt, gibt es in VS2015 keine Option "NuGet Package Restore aktivieren". Sie müssen den Wiederherstellungsvorgang manuell aufrufen. Ein schöner Weg - ohne sich mit Dateien und Verzeichnissen zu beschäftigen - ist die Verwendung der NuGet Package Management Console: Klicken Sie in das Feld 'Schnellstart' (normalerweise in der oberen rechten Ecke), geben Sie console ein, öffnen Sie die Verwaltungskonsole, und geben Sie ein Befehl:

Update-Package –reinstall

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

Update-Package –reinstall -ProjectName MyProject

Dies ist natürlich nur dann notwendig, wenn der von VS2015 angebotene Restore-Button - manchmal nicht verfügbar ist. Weitere nützliche Aktualisierungsbefehle werden hier aufgeführt und erläutert: https://docs.Microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

11
Jack Miller

Beim Upgrade 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 Package Restore, um sie herunterzuladen. 

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

Ich habe mein Problem behoben, als ich ein kleines Programm geschrieben habe, das MSBuild-Integrated-Paketwiederherstellung vs. Automatic Package Restore

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

Bitte lassen Sie mich das Ergebnis wissen :-)!

 enter image description here

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

    }
}
6
Eric Ouellet

Gehen Sie zu Verweise in Visual Studio und prüfen Sie, welche Pakete fehlen. __ Klicken Sie mit der rechten Maustaste auf Lösung in Visual und klicken Sie im Datei-Explorer auf Öffnen Visual Studio und bauen Sie einfach die Lösung. Alle fehlenden Pakete werden wiederhergestellt. Bitte markieren Sie dies als Antwort, wenn ich geholfen habe.

5
Sandip Jaiswal

Ich nehme an, dass wir für das asp.net 4-Projekt auf die automatische Wiederherstellung umstellen, sodass dies nicht erforderlich ist. Bei älteren Projekten denke ich, dass etwas Konvertierungsaufwand erforderlich ist.

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

4
Luca Morelli

Beim Versuch, das Beispielprojekt gplus-quickstart-csharp-master zu erstellen, war ich mit dem gleichen Problem konfrontiert.

Ich habe mir die Fehlermeldung genau angesehen und eine Lösung gefunden, um diesen Fehler zu überwinden. Dies wird hoffentlich helfen.

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

Genießen !!

4
Manoj Verma

Dieser Ansatz hat für mich funktioniert: 

  • Schließen Sie VS2015
  • Öffnen Sie die Lösung vorübergehend in VS2013, und aktivieren Sie das nuget package restore , indem Sie mit der rechten Maustaste auf die Lösung klicken. 
  • Schließen Sie VS2013
  • Öffnen Sie die Lösung in VS2015 erneut

Sie haben jetzt nuget package restore auch in VS2015 aktiviert.

4

Ivan Branets 's Lösung ist im Wesentlichen das, was dies für mich behoben hat, aber es könnten noch einige Details weitergegeben werden.

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

Das Problem bestand darin, dass einige Pakete nicht vollständig wiederhergestellt wurden, als ein anderer Entwickler versuchte, eine Lösung von TFS zu erhalten. (Warum bin ich noch nicht ganz sicher.) Aber der Paketordner enthielt einen Ordner für die Referenz und das NuGet-Paket, der jedoch nicht erweitert wurde (beispielsweise wurde ein lib-Ordner mit einer DLL-Datei nicht gefunden.) Diese Hälfte dort, aber nicht wirklich das richtige Konzept verhinderte die Wiederherstellung des Pakets.

Sie erkennen dies daran, dass der Verweis ein gelbes Ausrufezeichen enthält, da er nicht aufgelöst werden kann.

Mit Lösung von Löschen des Ordners in Paketen wird das Blockierungsproblem bei der Paketwiederherstellung entfernt. Dann können Sie Rechtsklick auf oberster Lösungsebene, um die Option Wiederherstellen von Paketen zu erhalten, und jetzt sollte es funktionieren.

3
Greg

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 ...". Über dem Fenster "Nuget Package Manager" wird eine gelbe Leiste angezeigt, in der Sie zur Wiederherstellung von Paketen aufgefordert werden. Das hat bei mir funktioniert.

3
Mandeep Janjua

Package Manager Console (Visual Studio, Extras> NuGet Package Manager> Package Manager Console): Führen Sie den Befehl Update-Package -reinstall -ProjectName aus. Dabei steht der Name des betroffenen Projekts, wie er im Projektmappen-Explorer angezeigt wird. Verwenden Sie Update-Package -reinstall, um alle Pakete in der Lösung wiederherzustellen. Siehe Update-Paket. Auf Wunsch können Sie auch ein einzelnes Paket erneut installieren.

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

2
Andreas

Ich habe msbuild /t:restore verwendet.


Kredit und Quelle:

Mein Problem war mit MSBuildSo folgte ich dem Link von @Vinney Kelly: Migrieren von MSBuild-Integrated-Lösungen zur automatischen Wiederherstellung von Paketen

und...

Das funktionierte wie ein charme =]

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

1
Yitzchak

Kann auch ein Ergebnis der Ausführung des Programms sein, während Sie versuchen, das Paket zu installieren. Wenn Sie versuchen, darauf zu klicken, während das integrierte IIS im Hintergrund ausgeführt wird, ist es ausgegraut.

1
Katushai

Ich musste die Paketordner-Lösung "Schließen" und "Öffnen" (VS2015) entfernen. Ich habe nicht migriert und habe keine Pakete in der Quellcodeverwaltung geprüft. Alles, was ich sagen kann, ist, dass etwas durcheinander geraten ist und dies behoben wurde.

0
Chris Hammons

Hat mir durch Tools >>> Nuget Package Manager >>> General geholfen. Aktivieren Sie dann die Option Nuget das Herunterladen fehlender Pakete und während des Builds automatisch auf fehlende Pakete prüfen visuelles studio.

 enter image description here

0
Anjan Kant

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 übernimmt, wenn es nach Ordner geöffnet wird. Dies geschieht standardmäßig, wenn Sie Visual Studio-Onlinedienste für git verwenden.

0
Jack

Führen Sie für .NET Core-Projekte den Befehl dotnet restore oder dotnet build in NuGet Package Manager Console aus (der die Wiederherstellung automatisch ausführt)

Sie können die Konsole von ausführen

Extras> NuGet Package Manager> Paket-Manager-Konsole

0
MOH3N

Verwenden Sie diesen Befehl, um alle Pakete wiederherzustellen

dotnet restore
0

Wenn alles andere fehlschlägt (oder vielleicht vorher), möchten Sie vielleicht nachsehen, ob es sich bei NuGet um eine Paketquelle handelt. Ich habe VS2017 installiert, und es war standardmäßig NICHT dort. Ich fand es irgendwie seltsam.

  1. Extras - NuGet Package Manager - Package Manager-Einstellungen
  2. Klicken Sie im linken Navigationsbereich des Dialogfelds auf "Paketquellen".
  3. Verwenden Sie das Pluszeichen (+), um die Nuget-URL hinzuzufügen: https://api.nuget.org/v3/index.json
0