c# - मैं विजुअल स्टूडियो में NuGet पैकेज पुनर्स्थापना कैसे सक्षम करूं?




asp.net visual-studio-2015 (12)

पैकेज मैनेजर कंसोल (विजुअल स्टूडियो, टूल्स> NuGet पैकेज मैनेजर> पैकेज मैनेजर कंसोल): अद्यतन-पैकेज -इंस्टॉल -प्रोजेक्टनाम कमांड चलाएं, जहां प्रभावित प्रोजेक्ट का नाम समाधान एक्सप्लोरर में दिखाई देता है। समाधान में सभी संकुल को पुनर्स्थापित करने के लिए अद्यतन-पैकेज-पुनर्स्थापित करें। अद्यतन-पैकेज देखें। वांछित अगर आप एक पैकेज भी पुनर्स्थापित कर सकते हैं।

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

स्टैक पर एक समान पोस्ट है लेकिन यह संभवतः मेरे मुद्दे से मदद नहीं करता क्योंकि मैं विजुअल स्टूडियो 2015 का उपयोग कर रहा हूं।

मैं VS2015 में दिखाई देने के लिए "NuGet पैकेज पुनर्स्थापना सक्षम करें" विकल्प कैसे प्राप्त करूं?

मैंने फाइल> नई परियोजना का चयन किया और एक खाली एएसपी.नेट वेब एप्लीकेशन बनाया । मैं इस मेनू विकल्प की तलाश में हूं।

मुझे जिक्र करना चाहिए कि मैंने अपने प्रोजेक्ट फ़ोल्डर में किसी भी पूर्व-मौजूदा nuGet फ़ाइलों को देखा है और कोई भी नहीं है।


Vx20XX से VS2015 तक nuget संकुल के साथ प्रोजेक्ट को अपग्रेड करते समय, आपको nuget संकुल में कोई समस्या हो सकती है।

त्रुटि संदेश का उदाहरण: यह प्रोजेक्ट इस कंप्यूटर पर अनुपलब्ध NuGet पैकेज (ओं) का संदर्भ देता है। उन्हें डाउनलोड करने के लिए NuGet पैकेज पुनर्स्थापित करें सक्षम करें।

2016-02-06 अपडेट करें: मेरे पास जानकारी का एक लिंक था लेकिन यह अब और काम नहीं करता है। मुझे संदेह है कि एक हालिया पथ ने समस्या हल कर दी है ???

मैंने अपनी समस्या को एक छोटा प्रोग्राम लिखने में तय किया जो MSBuild- एकीकृत पैकेज पुनर्स्थापित बनाम स्वचालित पैकेज पुनर्स्थापित करता है

आप here उपकरण के निष्पादन योग्य डाउनलोड कर सकते here

कृपया मुझे परिणाम बताएं :-)!

संदर्भ के रूप में कोड:

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

    }
}

इसमें बहुत लंबा समय लगा लेकिन मुझे अंततः स्वचालित पैकेज पुनर्स्थापना के लिए एमएसबिल्ड-एकीकृत समाधान माइग्रेट करने पर यह दस्तावेज़ मिला और मैं यहां वर्णित विधियों का उपयोग करके इस मुद्दे को हल करने में सक्षम था।

  1. समाधान के साथ '.nuget' समाधान निर्देशिका को हटा दें
  2. अपने .csproj या .vbproj फ़ाइलों से nuget.targets सभी संदर्भ हटाएं। हालांकि आधिकारिक रूप से समर्थित नहीं है, दस्तावेज़ पावरशेल स्क्रिप्ट से लिंक करता है यदि आपके पास बहुत सारी परियोजनाएं हैं जिन्हें साफ़ करने की आवश्यकता है। मैंने मैन्युअल रूप से हाथ से मेरा संपादन किया ताकि मैं इसके साथ अपने अनुभव के बारे में कोई प्रतिक्रिया न दे।

हाथों से अपनी फाइलों को संपादित करते समय, यहां आप जो खोज रहे हैं:

समाधान फ़ाइल (। एसएलएन)

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

प्रोजेक्ट फ़ाइल (.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>

जब आप पैकेज को स्थापित करने का प्रयास कर रहे हों तो प्रोग्राम चलाने का नतीजा भी हो सकता है। यदि आप आईआईएस पृष्ठभूमि में चल रहे हैं, तो इसे क्लिक करने का प्रयास करते समय यह ग्रे हो गया है।


दृश्य स्टूडियो में संदर्भों पर जाएं और देखें कि कौन से पैकेज गुम हैं। अब दृश्य में समाधान पर राइट क्लिक करें और फ़ाइल एक्सप्लोरर में खुले फ़ोल्डर पर क्लिक करें। अब पैकेज फ़ोल्डर खोलें और गायब पैकेज फ़ोल्डर हटाएं। खुला दृश्य स्टूडियो और बस समाधान का निर्माण करें। सभी लापता पैकेज बहाल हो जाएंगे। अगर मैंने मदद की तो कृपया उत्तर के रूप में इसे चिह्नित करें।


नमूना प्रोजेक्ट gplus-quickstart-csharp-master बनाने की कोशिश करते समय मुझे एक ही समस्या का सामना करना पड़ा।

मैंने बारीकी से त्रुटि संदेश देखा और इस त्रुटि पर काबू पाने से एक कामकाज पाया, उम्मीद है कि इससे मदद मिलेगी।

  • समाधान फ़ाइल पर राइट क्लिक करें और विंडोज एक्सप्लोरर में खोलें।
  • NuGet.Config, NuGet.exe, NuGet.targets के साथ कॉपी करें। Nuget फ़ोल्डर ( link डाउनलोड link या बस अन्य प्रोजेक्ट से कॉपी करें और प्रतिस्थापित करें)
  • समाधान पुनर्निर्माण करने का प्रयास करें।

का आनंद लें !!


मुझे लगता है कि एएसपीनेट 4 प्रोजेक्ट के लिए हम स्वचालित पुनर्स्थापना में जा रहे हैं, इसलिए इसकी कोई आवश्यकता नहीं है। पुरानी परियोजनाओं के लिए मुझे लगता है कि कन्वर्ट करने के लिए थोड़ा सा काम जरूरी है।

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


मुझे संकुल फ़ोल्डर को बंद करना और पुनः खोलना था (वीएस2015) समाधान। मैं माइग्रेट नहीं कर रहा था और मेरे पास स्रोत नियंत्रण में पैकेज नहीं थे। मैं बस इतना कह सकता हूं कि कुछ गड़बड़ हो गया है और यह तय है।


यह दृष्टिकोण मेरे लिए काम किया:

  • वीएस2015 बंद करें
  • समाधान को अस्थायी रूप से VS2013 में खोलें और समाधान पर राइट क्लिक करके nuget पैकेज पुनर्स्थापित करें (मैंने पुनर्निर्माण भी किया है, लेकिन मुझे संदेह है कि इसकी आवश्यकता नहीं है)।
  • वीएस2013 बंद करें
  • वीएस2015 में समाधान दोबारा खोलें

अब आपने VS2015 में nuget पैकेज पुनर्स्थापना भी सक्षम की है।


यहां तक ​​कि सरल, अपने समाधान में एक .nuget फ़ोल्डर जोड़ें और 'Nuget पैकेज पुनर्स्थापित करें' दिखाई देगा (सुनिश्चित नहीं है कि nuget.exe को इसके लिए काम करने की आवश्यकता है)।


वैकल्पिक रूप से आप "फ़ोल्डर्स" फ़ोल्डर से सभी फ़ोल्डरों को हटा सकते हैं और "समाधान के लिए NuGet संकुल प्रबंधित करें ..." का चयन कर सकते हैं। इस मामले में Nuuget संकुल विंडोज़ पर "पुनर्स्थापित करें" बटन प्रकट होता है।


इवान ब्रैनट्स का समाधान अनिवार्य रूप से मेरे लिए तय किया गया है, लेकिन कुछ और विवरण साझा किए जा सकते हैं।

मेरे मामले में, मैं ऑटो पैकेज पुनर्स्थापन और टीएफएस का उपयोग कर वीएस 2015 में था। यह सब सुंदर डिफ़ॉल्ट सामान है।

समस्या यह थी कि जब एक और डेवलपर ने टीएफएस से समाधान प्राप्त करने का प्रयास किया, तो कुछ पैकेज पूरी तरह से बहाल नहीं हो रहे थे। (क्यों, कि मुझे अभी तक पूरा यकीन नहीं है।) लेकिन संकुल फ़ोल्डर में संदर्भ और NuGet पैकेज के लिए एक फ़ोल्डर था, लेकिन यह विस्तार नहीं हो रहा था (कहें कि एक .dll युक्त एक lib फ़ोल्डर गुम था।) यह आधा वहां, लेकिन वास्तव में बिल्कुल सही अवधारणा पैकेज को बहाल करने से रोक नहीं रही थी।

आप इसे पहचान लेंगे क्योंकि संदर्भ में हल होने के बारे में एक पीले विस्मयादिबोधक बिंदु होगा।

इसलिए, पैकेज के भीतर फ़ोल्डर को हटाने का समाधान पैकेज को पुनर्स्थापित करने के लिए पैकेज को पुनर्स्थापित करता है। फिर आप संकुल को पुनर्स्थापित करने के विकल्प प्राप्त करने के लिए शीर्ष समाधान स्तर पर राइट क्लिक कर सकते हैं , और अब इसे काम करना चाहिए।





nuget-package-restore