Làm cách nào để bật NuGet Gói Khôi phục trong Visual Studio?


272

Có một bài đăng tương tự trên stack nhưng nó không giúp ích gì cho vấn đề của tôi có thể vì tôi đang sử dụng Visual Studio 2015.

Làm cách nào để tôi có tùy chọn "Bật khôi phục gói NuGet" xuất hiện trong VS2015?

Tôi đã chọn File> New Project và tạo một ứng dụng web ASP.NET trống . Tôi đang tìm kiếm tùy chọn menu này.

nhập mô tả hình ảnh ở đây

Tôi nên đề cập rằng tôi đã tìm kiếm bất kỳ tệp nuGet nào tồn tại trong thư mục dự án của tôi và không có tệp nào.


4
Hãy chắc chắn rằng bạn đang thử điều này với Giải pháp của bạn chứ không phải dự án Web. Theo mặc định, giải pháp không được hiển thị khi chỉ có một dự án
JConstantine

1
Vâng, đó chắc chắn là một sai lầm dễ mắc phải nhưng tôi đã chắc chắn kiểm tra lại giải pháp, tôi nghĩ nó có thể liên quan đến năm 2015. Tùy chọn Bật có sẵn trong VS2013 khi tôi làm theo các bước tương tự.
Dan Beaulieu

2
Tương tự ở đây. Tôi thậm chí đã thử xóa thư mục .nuget để kích hoạt lại tùy chọn Bật NuGet Gói Khôi phục trong VS 2013 nhưng vẫn không có xúc xắc. Tôi đang cố gắng mở một ứng dụng MVC hiện có được tạo ra trong VS 2013.
Vinney Kelly

4
@justanotherdev Sẽ hữu ích nếu bạn cung cấp một tham chiếu đến quy trình làm việc mới để giúp bình luận của bạn hiệu quả hơn một chút.
avantprime

1
Tôi không thấy bài viết của David Ebbo được tham chiếu bởi oligofren vì vậy tôi chỉ mở các tệp sln & csproj trong Notepad ++ và xóa các phần anh ấy minh họa. Tôi đã mở giải pháp trong VS2015 và, khi tôi lưu các tệp, VS đã nhắc tôi tải lại chúng và các tham chiếu giải pháp của tôi hiện đã ổn và giải pháp của tôi biên dịch. Cảm ơn rất nhiều, Vinney!
Phường giàu

Câu trả lời:


248

Mất quá nhiều thời gian nhưng cuối cùng tôi đã tìm thấy tài liệu này về Di chuyển các giải pháp tích hợp MSBuild sang Khôi phục gói tự động và tôi đã có thể giải quyết vấn đề bằng các phương pháp được mô tả ở đây.

  1. Gỡ bỏ '.nuget' thư mục giải pháp cùng với giải pháp
  2. Xóa tất cả các tham chiếu đến nuget.targetstừ .csprojhoặc .vbprojtập tin của bạn . Mặc dù không được hỗ trợ chính thức, tài liệu liên kết đến tập lệnh PowerShell nếu bạn có nhiều dự án cần được dọn sạch. Tôi tự chỉnh sửa bằng tay để tôi không thể đưa ra bất kỳ phản hồi nào về trải nghiệm của mình với nó.

Khi chỉnh sửa tệp của bạn bằng tay, đây là những gì bạn sẽ tìm kiếm:

Tệp giải pháp (.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

Tệp dự án (.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>

3
Tôi hoàn toàn thiếu một cái gì đó ở đây. Khi tôi sử dụng phương pháp này, tôi nhận được một gói các gói được cài đặt trong mọi giải pháp tôi có. Tôi đã có một giải pháp với 10 gói và một giải pháp khác có cùng gói chính xác: hai thư mục khác nhau được tạo cho mỗi gói chứa 10 gói. Sử dụng phương pháp này, làm thế nào để bạn hợp nhất tất cả các gói của bạn vào một thư mục duy nhất (như phương thức VS2013 cũ cho phép bằng cách chỉnh sửa tệp NuGet.Config)?
Quarkly

Không thấy thư mục .nuget? Đi kiểm tra các giải pháp về việc xóa các thư mục trong thư mục gói. Có thể gói của bạn đã được khôi phục một nửa và rác đó đang chặn nó khôi phục hoàn toàn.
Greg

Quả thực đây là giải pháp. Ngoài ra - tôi đã thêm "khôi phục nuget" trước khi bắt đầu xây dựng dự án. gói nuget được tự động tải xuống và xây dựng dự án hoạt động tốt sau đó.
TarmoPikaro

5
Để tiết kiệm một chút thời gian, tập lệnh thực thi từ kho GitHub được đề cập bởi @VinneyKelly là di chuyểnToAutomaticPackageRestore.ps1, phép thuật của nó, hoạt động!
Riga

60

Microsoft đã bỏ hỗ trợ cho 'Kích hoạt khôi phục gói NuGet' trong VS2015 và bạn cần thực hiện một số thay đổi thủ công để di chuyển các giải pháp cũ hoặc thêm tính năng này vào các giải pháp mới. Tính năng mới được mô tả khá tốt trong Khôi phục gói NuGet .

Ngoài ra còn có một hướng dẫn di chuyển cho các dự án hiện có (như đã đề cập trước đây) tại đây: Hướng dẫn di chuyển NuGet

Khi nâng cấp:

  1. không xóa thư mục .nuget.
  2. Xóa các tệp nuget.exe và nuget.target.
  3. Để lại nuget.config.
  4. Dọn sạch từng tệp dự án của bất kỳ tham chiếu nào đến các mục tiêu NuGet bằng tay. Kịch bản Powershell được đề cập dường như gây ra nhiều thiệt hại hơn là tốt.

Khi tạo một dự án mới:

  1. Trong giải pháp Visual Studio 2015 của bạn, hãy tạo Thư mục giải pháp có tên .nuget.
  2. Tạo một thư mục thực tế của thư mục giải pháp (nơi tệp .sln sống) và gọi nó là .nuget (lưu ý rằng thư mục giải pháp không giống với thư mục hệ thống tệp thực tế mặc dù chúng có cùng tên).
  3. Tạo một tệp trong thư mục .nuget có tên nuget.config.

  4. Thêm 'nuget.config' vào thư mục giải pháp được tạo ở bước # 2.

  5. Đặt văn bản sau vào tệp nuget.config:

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

Tệp cấu hình này sẽ cho phép bạn hợp nhất tất cả các gói của bạn ở một nơi duy nhất để bạn không có 20 bản sao khác nhau của cùng một gói trôi nổi trên hệ thống tệp của mình. Đường dẫn tương đối sẽ thay đổi tùy thuộc vào kiến ​​trúc thư mục giải pháp của bạn nhưng nó sẽ trỏ đến một thư mục chung cho tất cả các giải pháp của bạn.

Bạn cần khởi động lại studio hình ảnh sau khi thực hiện bước 5. Nuget sẽ không nhận ra các thay đổi cho đến khi bạn làm như vậy.

Cuối cùng, bạn có thể phải sử dụng 'Trình quản lý gói Nuget cho các giải pháp' để gỡ cài đặt và sau đó cài đặt lại các gói. Tôi không biết liệu đây có phải là tác dụng phụ của kịch bản Powershell mà tôi đã chạy hay chỉ là một phương pháp để đưa NuGet trở lại vào thiết bị. Khi tôi đã thực hiện tất cả các bước này, kiến ​​trúc xây dựng phức tạp của tôi hoạt động hoàn hảo trong việc đưa xuống các gói mới khi tôi kiểm tra các dự án ra khỏi TFVC.


1
Tại sao xóa tệp nuget.target, tôi sẽ có được bản dựng nhất quán khi thiếu?
Frode Nilsen

1
Các mục tiêu dường như được tích hợp vào IDE bây giờ, cũng như chức năng mà 'nugget.exe' được sử dụng để cung cấp. Điều duy nhất bạn vẫn cần là cấu hình.
Quarkly

1
Ngoài các bước được DRAirey đề cập, tôi phải thực hiện các bước sau: 1) Thay vì $ \ .. \ .. \ .. \ .. \ Gói, được sử dụng ../../ (quy ước đường dẫn cha mẹ, không $ khi bắt đầu 2) Lưu giải pháp, đóng và mở lại để nuget.config được đọc và vinh danh khi cài đặt gói
Sudhanshu Mishra

Điều này đã giúp cho dự án VS2015 mới của tôi, nơi tôi đã gửi các gói dir và các thành viên khác trong nhóm không thể xây dựng lại vì sự phụ thuộc của NuGet.
azec-pdx

1
Bạn cần khởi động lại studio hình ảnh sau khi thực hiện bước 5. Nuget sẽ không nhận ra các thay đổi cho đến khi bạn làm như vậy.
Barry Colebank Jr

35

Tùy chọn, bạn có thể xóa tất cả các thư mục khỏi thư mục "gói" và chọn "Quản lý gói NuGet cho Giải pháp ...". Trong trường hợp này, nút "Khôi phục" xuất hiện trên NuGet Gói Windows.


1
Cố gắng đóng và mở lại Cửa sổ Gói NuGet sau khi xóa các thư mục trong thư mục "gói".
Ivan Branets

6
+1 Điều này làm việc với tôi, lưu ý rằng nút khôi phục bật lên ở đầu cửa sổ, ngay bên dưới tab. Nói: "Một số gói NuGet bị thiếu trong giải pháp này. Nhấp để khôi phục từ các nguồn gói trực tuyến của bạn."
Eruza

Rất đơn giản và dễ dàng .. điều này hiệu quả với tôi .. Đoán đây sẽ là câu trả lời được bình chọn nhiều hơn :)
Nirman

Thật đơn giản và dễ dàng. Đây nên là câu trả lời.
Axel

Sẽ không phải là một ý tưởng tốt để thêm thư mục này vào tệp .gitignore?
Axel

26

Như Mike đã đề cập, không có tùy chọn 'Kích hoạt khôi phục gói NuGet' trong VS2015. Bạn sẽ phải gọi quá trình khôi phục bằng tay. Một cách hay - không gây rối với các tệp và thư mục - là sử dụng Bảng điều khiển quản lý gói NuGet : Nhấp vào trường 'Bắt ​​đầu nhanh' (thường ở góc trên bên phải), nhập console, mở bảng điều khiển quản lý và nhập lệnh:

Update-Package reinstall

Điều này sẽ cài đặt lại tất cả các gói của tất cả các dự án trong giải pháp của bạn. Để chỉ định một dự án, nhập:

Update-Package reinstall -ProjectName MyProject

Tất nhiên điều này chỉ cần thiết khi Restorenút - đôi khi được cung cấp bởi VS2015 - không khả dụng. Các lệnh cập nhật hữu ích khác được liệt kê và giải thích tại đây: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


Cảm ơn rất nhiều, tôi đã có vấn đề tương tự. Tôi vừa giải quyết vấn đề của tôi thông qua thủ tục của bạn. Cảm ơn bạn rất nhiều
McElie

Tương tự ở đây, người duy nhất đã làm việc và không cần một loạt những thứ được viết ở khắp mọi nơi
Harvey Lin

Câu trả lời hữu ích nhất ở đây!
Neo

13

Nếu bạn có bất kỳ vấn đề hoặc thiếu bất kỳ gói nào, bạn chỉ cần nhấp chuột phải vào dự án của mình và chọn " Quản lý gói NuGet cho Giải pháp ... ". Sau khi nhấp vào đây, một màn hình sẽ mở ra nơi bạn thấy một thanh menu có nội dung "Khôi phục": Khôi phục

Nhấp vào nó và các gói yêu cầu sẽ được cài đặt tự động.
Tôi tin rằng đây là những gì bạn đang tìm kiếm, điều này đã giải quyết vấn đề của tôi.


3
Nhưng điều đó chỉ có ích nếu thanh cảnh báo đó xuất hiện, nó không có trong trường hợp của tôi.
Nicholas Petersen

2
Một bước cài đặt thủ công một gói hoàn toàn bỏ lỡ điểm khôi phục tự động.
Quarkly

Tôi tin rằng đây có lẽ là câu trả lời được chấp nhận, nó có cùng chức năng
user25064

1
Tôi đã có thể thấy tùy chọn để khôi phục bằng cách nhấp chuột phải vào giải pháp. Nó nằm ở dưới "Quản lý các gói NuGet cho giải pháp". Đã lừa tôi.
Daryl

1
Không hoạt động đối với tôi - Tôi thấy các cảnh báo trong giải pháp liên quan đến các gói nuget bị thiếu, nhưng việc quản lý các gói nuget không cung cấp cho tôi tùy chọn để tải xuống. Tôi cũng không thể xây dựng và khôi phục. Ngoài ra lệnh khôi phục không làm gì cả.
Markus


6

Khi nâng cấp các dự án với các gói nuget từ Vx20XX lên VS2015, bạn có thể gặp vấn đề với các gói nuget.

Ví dụ về thông báo lỗi: Dự án này tham chiếu (các) gói NuGet bị thiếu trên máy tính này. Kích hoạt Khôi phục Gói NuGet để tải xuống.

Cập nhật 2016 / 02-06: Tôi đã có một liên kết đến thông tin nhưng nó không hoạt động nữa. Tôi nghi ngờ rằng một con đường gần đây đã giải quyết vấn đề ???

Tôi đã khắc phục sự cố của mình khi viết một chương trình nhỏ thực hiện khôi phục gói Tích hợp MSBuild so với Khôi phục gói tự động

Bạn có thể tải về thực thi của công cụ ở đây .

Xin vui lòng cho tôi biết kết quả :-)!

nhập mô tả hình ảnh ở đây

Mã làm tài liệu tham khảo:

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

    }
}

Chương trình hoạt động tốt để chuyển đổi một tấn dự án trong giải pháp của tôi. Phiên bản mới nhất cũng có trường "Danh mục các gói NuGet" nhưng dường như không ảnh hưởng đến đầu ra. Nó làm gì?
Christoffer Årstrand

Xin lỗi, tôi không có ý kiến. Tôi nghi ngờ rằng nó sẽ phụ thuộc vào nội dung của tập tin. Có lẽ bạn có thể theo dõi chức năng: "FromProjectFileRemoveNugetT Target" và xem liệu tệp của bạn có thể bị ảnh hưởng không? Xin lỗi vì câu trả lời tồi đó, tôi không nhớ những gì tôi đã mã hóa :-(! Tôi chỉ biết rằng tôi đã sử dụng hai lần trên 2 máy tính khác nhau thành công.
Eric Ouellet

5

Đi đến Tài liệu tham khảo trong phòng thu trực quan và xem xét các gói bị thiếu. Bây giờ, nhấp chuột phải vào Solution in Visual và nhấp vào thư mục mở trong file explorer. Bây giờ mở thư mục gói và xóa thư mục gói bị thiếu. Mở studio trực quan và chỉ cần xây dựng giải pháp. tất cả các gói còn thiếu sẽ được khôi phục. Vui lòng đánh dấu đây là câu trả lời nếu tôi giúp.


4

Tôi cho rằng đối với dự án asp.net 4, chúng tôi đang chuyển sang khôi phục tự động, do đó không cần điều này. Đối với các dự án cũ tôi nghĩ rằng một chút công việc để chuyển đổi là cần thiết.

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


Bạn có thể đúng. Tôi vừa thử tạo dự án bằng các bước chính xác trong VS2013 và "Bật khôi phục gói Nuget" đã có. Cảm ơn liên kết, tôi sẽ kiểm tra nó ngay bây giờ.
Dan Beaulieu

4

Cách tiếp cận này hiệu quả với tôi:

  • Đóng VS2015
  • Mở giải pháp tạm thời trong VS2013 và cho phép khôi phục gói nuget bằng cách nhấp chuột phải vào giải pháp (tôi cũng đã xây dựng lại, nhưng tôi nghi ngờ rằng điều đó là không cần thiết).
  • Đóng VS2013
  • Mở lại giải pháp trong VS2015

Bây giờ bạn cũng đã bật khôi phục gói nuget trong VS2015.


4

Tôi đã đối mặt với cùng một vấn đề trong khi cố gắng xây dựng dự án mẫu gplus-quickstart-csharp-master .

Tôi đã xem xét kỹ thông báo lỗi và tìm thấy một cách giải quyết từ việc khắc phục lỗi này, hy vọng, điều này sẽ giúp ích.

  • Nhấp chuột phải vào tập tin giải pháp và mở trong windows explorer.
  • Sao chép thư mục .nuget bằng NuGet.Config, NuGet.exe, NuGet.target ( liên kết tải xuống hoặc đơn giản là sao chép từ dự án khác và thay thế)
  • Cố gắng xây dựng lại giải pháp.

Thưởng thức !!


4

Ivan BranetsGiải pháp của về cơ bản là những gì đã khắc phục điều này cho tôi, nhưng một số chi tiết có thể được chia sẻ.

Trong trường hợp của tôi, tôi đã ở VS 2015 bằng cách sử dụng khôi phục gói tự độngTFS . Đây là tất cả những thứ khá mặc định.

Vấn đề là khi một nhà phát triển khác cố gắng có được giải pháp từ TFS, một số gói không được khôi phục hoàn toàn. (Tại sao, điều đó tôi vẫn chưa chắc chắn lắm.) Nhưng thư mục gói chứa một thư mục để tham khảo và gói NuGet, nhưng nó không được mở rộng (giả sử một thư mục lib chứa một ZIP bị mất.) ở đó, nhưng khái niệm không thực sự đúng đã ngăn gói được khôi phục.

Bạn sẽ nhận ra điều này bởi vì tài liệu tham khảo sẽ có một dấu chấm than màu vàng về việc không được giải quyết.

Vì vậy, giải pháp của xóa các thư mục trong gói loại bỏ các gói khôi phục chặn vấn đề. Sau đó, bạn có thể nhấp chuột phải ở cấp độ giải pháp hàng đầu để có tùy chọn khôi phục các gói và bây giờ nó sẽ hoạt động.


4

Đóng VS. Xóa mọi thứ trong thư mục gói. Mở lại giải pháp của bạn. Nhấp chuột phải vào dự án của bạn, chọn 'Quản lý gói nuget ...'. Bạn sẽ thấy một thanh màu vàng xuất hiện trên đầu cửa sổ 'Trình quản lý gói Nuget', yêu cầu bạn khôi phục các gói. Điều này đã làm việc cho tôi.


3

Bảng điều khiển Trình quản lý gói (Visual Studio, Công cụ> Trình quản lý gói NuGet> Bảng điều khiển Trình quản lý gói): Chạy lệnh Cập nhật-Gói -reinstall -ProjectName trong đó tên của dự án bị ảnh hưởng như xuất hiện trong Solution Explorer. Sử dụng Cập nhật-Gói - tự cài đặt để khôi phục tất cả các gói trong giải pháp. Xem Cập nhật-Gói. Bạn cũng có thể cài đặt lại một gói duy nhất, nếu muốn.

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


1

Cũng có thể là kết quả của việc chạy chương trình trong khi bạn đang cố gắng cài đặt gói. nó chuyển sang màu xám nếu bạn cố gắng nhấp vào nó trong khi IIS tích hợp đang chạy trong nền.


1

Trong trường hợp bất kỳ ai khác phát hiện ra vấn đề này trong Visual Studio 2017, hãy đảm bảo dự án được mở bằng tệp .sln chứ không phải thư mục, vì visual studio sẽ không nhận cài đặt nếu nó được mở bởi thư mục. Điều này xảy ra theo mặc định nếu bạn đang sử dụng các dịch vụ trực tuyến của Visual Studio cho git.


1

Đối với các dự án .NET Core , hãy chạy dotnet restorehoặc ra dotnet buildlệnhNuGet Package Manager Console (tự động chạy khôi phục)

Bạn có thể chạy bàn điều khiển từ

Công cụ> Trình quản lý gói NuGet> Bảng điều khiển quản lý gói


1

Tôi đã sử dụng msbuild /t:restore.


Tín dụng và nguồn:

Vấn đề của tôi là với MSBuild Vì vậy, tôi đã theo liên kết của @Vinney Kelly : Di chuyển các giải pháp tích hợp MSBuild sang Khôi phục gói tự động

và ...

Điều đó đã làm việc THÍCH MỘT CHARM =]

MSBuild : sử dụng msbuild /t:restorelệnh, phục hồi các gói gói được liệt kê trong tệp dự án ( chỉ GóiReference ). Chỉ khả dụng trong NuGet 4.x + và MSBuild 15.1+, được bao gồm trong Visual Studio 2017 . nuget restoredotnet restorecả hai đều sử dụng lệnh này cho các dự án áp dụng.


Trong trường hợp của tôi / t: restore không xây dựng dự án mà tôi đã phải sử dụng / khôi phục lệnh
Kishan Vaishnav

1

Nếu vẫn thất bại (hoặc có lẽ trước đó), bạn có thể muốn kiểm tra và xem NuGet có phải là nguồn gói không. Tôi đã cài đặt VS2017 và mặc định nó KHÔNG ở đó. Tôi nghĩ đó là một loại kỳ lạ.

  1. Công cụ - Trình quản lý gói NuGet - Cài đặt trình quản lý gói
  2. Nhấp vào 'Nguồn gói' trên hộp thoại bên trái của hộp thoại.
  3. Sử dụng dấu cộng (+) để thêm URL Nuget: https://api.nuget.org/v3/index.json

0

Tôi đã phải loại bỏ gói thư mục đóng và mở lại giải pháp (VS2015). Tôi đã không di chuyển và tôi không có các gói được kiểm tra trong kiểm soát nguồn. Tất cả những gì tôi có thể nói là một cái gì đó đã bị rối tung và điều này đã sửa nó.


0

Đã giúp tôi thông qua Công cụ >>> Trình quản lý gói Nuget >>> Chung sau đó chọn tùy chọn Cho phép Nuget tải xuống gói bị thiếuTự động kiểm tra các gói bị thiếu trong quá trình xây dựng trong studio trực quan .

nhập mô tả hình ảnh ở đây


0

Tôi đang đối mặt với vấn đề tương tự. Tôi đang cố gắng thêm một dự án MVC đã được tạo trên Visual Studio 2015 vào một giải pháp mà tôi đã thực hiện trên Visual Studio 2019.

Đã có các dự án hiện có trên Visual Studio 2019, vì vậy việc thêm dự án hiện có mà tôi đã tạo trên VS 2015 gây ra lỗi tương tự. Tôi đã thử tất cả các câu trả lời ở đây nhưng nó không khắc phục được vấn đề.

Những gì tôi đã làm chỉ là đặt thư mục .nuget vào thư mục giải pháp. Ban đầu hệ thống phân cấp của thư mục này là:

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)

Vì vậy, sự cố đã được khắc phục khi tôi di chuyển thư mục .nuget trên chính thư mục giải pháp:

    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)

0

Giải pháp VS 2019 Phiên bản 16.4.4 nhắm mục tiêu .NET Core 3.1

Sau khi đã thử gần như tất cả các giải pháp được đề xuất ở đây, tôi đã đóng VS. Khi tôi mở lại, sau vài giây tất cả đã hoạt động trở lại ...


-4

Thậm chí đơn giản hơn, hãy thêm thư mục .nuget vào giải pháp của bạn và 'Khôi phục gói Nuget' sẽ xuất hiện (không chắc chắn liệu nuget.exe có cần phải có mặt để nó hoạt động hay không).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.