Bagaimana cara mengaktifkan Pemulihan Paket NuGet di Visual Studio?

273

Ada posting serupa di stack tetapi tidak membantu dengan masalah saya mungkin karena saya menggunakan Visual Studio 2015.

Bagaimana cara mendapatkan opsi "Aktifkan Pemulihan Paket NuGet" muncul di VS2015?

Saya memilih File> Proyek Baru dan membuat Aplikasi Web ASP.NET kosong . Saya mencari opsi menu ini.

masukkan deskripsi gambar di sini

Saya harus menyebutkan bahwa saya telah mencari file nuGet yang sudah ada di folder proyek saya dan tidak ada.

Dan Beaulieu
sumber
4
Pastikan Anda mencoba ini terhadap Solusi Anda dan bukan proyek Web. Secara default solusinya tidak ditampilkan ketika hanya ada satu proyek
JConstantine
1
Ya, itu pasti kesalahan yang mudah untuk dilakukan tetapi saya memastikan untuk memeriksa solusinya, saya pikir itu mungkin terkait tahun 2015. Opsi Enable tersedia di VS2013 ketika saya mengikuti langkah yang sama.
Dan Beaulieu
2
Sama disini. Saya bahkan mencoba menghapus folder .nuget yang mengaktifkan kembali opsi Enable NuGet Package Restore di VS 2013 tetapi masih belum ada dadu. Saya mencoba untuk membuka aplikasi MVC yang sudah ada yang dibuat di VS 2013.
Vinney Kelly
4
@justanotherdev Akan bermanfaat jika Anda memberikan referensi ke alur kerja baru untuk membuat komentar Anda sedikit lebih produktif.
avantprime
1
Saya tidak melihat artikel David Ebbo direferensikan oleh oligofren jadi saya hanya membuka file sln & csproj di Notepad ++ dan menghapus bagian yang diilustrasikannya. Saya memiliki solusi terbuka di VS2015 dan, setelah saya menyimpan file, VS meminta saya untuk memuatnya kembali dan referensi solusi saya sekarang baik dan solusi saya mengkompilasi. Terima kasih banyak, Vinney!
Rich Ward

Jawaban:

248

Butuh waktu terlalu lama tetapi saya akhirnya menemukan dokumen ini tentang Migrasi solusi MSBuild-Integrated ke Pemulihan Paket Otomatis dan saya dapat menyelesaikan masalah menggunakan metode yang dijelaskan di sini.

  1. Hapus '.nuget'direktori solusi bersama dari solusi
  2. Hapus semua referensi nuget.targetsdari .csprojatau .vbprojfile Anda. Meskipun tidak didukung secara resmi, dokumen tersebut tertaut ke skrip PowerShell jika Anda memiliki banyak proyek yang perlu dibersihkan. Saya secara manual mengedit tulisan saya dengan tangan sehingga saya tidak bisa memberikan tanggapan mengenai pengalaman saya dengannya.

Saat mengedit file Anda dengan tangan, inilah yang akan Anda cari:

File Solusi (.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

File Proyek (.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
sumber
3
Saya benar-benar kehilangan sesuatu di sini. Ketika saya menggunakan metode ini, saya mendapatkan satu paket kapal yang diinstal di setiap solusi yang saya miliki. Saya punya satu solusi dengan 10 paket dan solusi lain dengan paket yang sama persis: dua direktori berbeda dibuat masing-masing berisi 10 paket. Dengan menggunakan metode ini, bagaimana Anda menggabungkan semua paket Anda ke dalam satu direktori (seperti metode VS2013 lama memungkinkan dengan mengedit file NuGet.Config)?
Quarkly
Tidak melihat folder .nuget? Pergi memeriksa solusi tentang menghapus folder di folder paket. Mungkin paket Anda setengah dikembalikan, dan sampah menghalangi untuk memulihkan sepenuhnya.
Greg
Memang ini solusinya. Selain itu - saya telah menambahkan "nuget restore" sebelum mulai membangun proyek. paket nuget diunduh secara otomatis, dan proyek build berfungsi dengan baik setelah ini.
TarmoPikaro
5
Untuk menghemat sedikit waktu, skrip untuk dieksekusi dari repositori GitHub yang disebutkan oleh @VinneyKelly adalah migrateToAutomaticPackageRestore.ps1, keajaibannya, berhasil!
Riga
60

Microsoft telah menjatuhkan dukungan untuk 'Aktifkan Pemulihan Paket NuGet' di VS2015 dan Anda perlu melakukan beberapa perubahan manual untuk memigrasikan solusi lama atau menambahkan fitur ke solusi baru. Fitur baru ini dijelaskan dengan cukup baik di NuGet Package Restore .

Ada juga panduan migrasi untuk proyek-proyek yang ada (seperti yang disebutkan sebelumnya) di sini: Panduan Migrasi NuGet

Saat meningkatkan:

  1. jangan hapus direktori .nuget.
  2. Hapus file nuget.exe dan nuget.targets.
  3. Tinggalkan nuget.config.
  4. Bersihkan setiap file proyek dari referensi apa pun ke target NuGet dengan tangan. Naskah Powershell yang disebutkan tampaknya lebih merusak daripada baik.

Saat membuat proyek baru:

  1. Dalam solusi Visual Studio 2015 Anda, buat Direktori Solusi yang disebut .nuget.
  2. Buat direktori aktual dari direktori solusi (tempat file .sln hidup) dan sebutlah .nuget (perhatikan bahwa direktori solusi tidak sama dengan direktori sistem file yang sebenarnya walaupun mereka memiliki nama yang sama).
  3. Buat file di direktori .nuget yang disebut nuget.config.

  4. Tambahkan 'nuget.config' ke direktori solusi yang dibuat pada langkah # 2.

  5. Tempatkan teks berikut di file 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>

File konfigurasi ini akan memungkinkan Anda untuk menggabungkan semua paket Anda di satu tempat sehingga Anda tidak memiliki 20 salinan berbeda dari paket yang sama yang beredar di sistem file Anda. Jalur relatif akan berubah tergantung pada arsitektur direktori solusi Anda, tetapi harus menunjuk ke direktori yang sama untuk semua solusi Anda.

Anda harus memulai ulang studio visual setelah melakukan langkah 5. Nuget tidak akan mengenali perubahan sampai Anda melakukannya.

Terakhir, Anda mungkin harus menggunakan 'Nuget Package Manager for Solutions' untuk menghapus dan menginstal kembali paket-paket tersebut. Saya tidak tahu apakah ini adalah efek samping dari skrip Powershell yang saya jalankan atau hanya metode untuk menendang NuGet kembali ke persneling. Setelah saya melakukan semua langkah ini, arsitektur bangunan saya yang rumit bekerja dengan sempurna untuk menurunkan paket-paket baru ketika saya memeriksa proyek-proyek dari TFVC.

Quarkly
sumber
1
Mengapa menghapus file nuget.targets, akankah saya mendapatkan build yang konsisten ketika itu tidak ada?
Frode Nilsen
1
Target tampaknya diintegrasikan ke dalam IDE sekarang, serta fungsi yang digunakan 'nugget.exe'. Satu-satunya hal yang masih Anda butuhkan adalah konfigurasi.
Quarkly
1
Selain langkah-langkah yang disebutkan oleh DRAirey, saya harus melakukan yang berikut: 1) Alih-alih $ \ .. \ .. \ .. \ Paket, digunakan ../../ (konvensi jalur induk windows, tidak ada $ di awal 2) Simpan solusinya, tutup dan buka kembali untuk nuget.config untuk dibaca dan dihormati oleh instalasi paket
Sudhanshu Mishra
Ini membantu untuk proyek VS2015 baru saya di mana saya mengirimkan paket, dan anggota tim lainnya tidak dapat membangun kembali karena ketergantungan NuGet.
azec-pdx
1
Anda harus memulai ulang studio visual setelah melakukan langkah 5. Nuget tidak akan mengenali perubahan sampai Anda melakukannya.
Barry Colebank Jr
35

Secara opsional Anda dapat menghapus semua folder dari folder "paket" dan pilih "Kelola Paket NuGet untuk Solusi ...". Dalam hal ini, tombol "Pulihkan" muncul di NuGet Packages Windows.

Ivan Branets
sumber
1
Cobalah untuk menutup dan membuka kembali Jendela Paket NuGet setelah menghapus folder di dalam folder "paket".
Ivan Branets
6
+1 Ini berfungsi untuk saya, perhatikan bahwa tombol pemulihan muncul di bagian atas jendela, tepat di bawah tab. Mengatakan: "Beberapa paket NuGet hilang dari solusi ini. Klik untuk memulihkan dari sumber paket online Anda."
Eruza
Sangat sederhana dan mudah .. ini bekerja untuk saya .. Tebak ini harus lebih banyak dipilih sebagai jawaban :)
Nirman
Sangat sederhana dan mudah. Ini seharusnya jawabannya.
Axel
Bukankah sebaiknya menambahkan folder ini ke file .gitignore?
Axel
26

Seperti yang telah disebutkan oleh Mike, tidak ada opsi 'Aktifkan Pemulihan Paket NuGet' di VS2015. Anda harus menjalankan proses pemulihan secara manual. Cara yang bagus - tanpa mengotak-atik file dan direktori - menggunakan NuGet Package Management Console : Klik di bidang ' Mulai Cepat' (biasanya di sudut kanan atas), masukkan console, buka konsol manajemen, dan masukkan perintah:

Update-Package reinstall

Ini akan menginstal ulang semua paket semua proyek dalam solusi Anda. Untuk menentukan satu proyek, masukkan:

Update-Package reinstall -ProjectName MyProject

Tentu saja ini hanya diperlukan ketika Restoretombol - terkadang ditawarkan oleh VS2015 - tidak tersedia. Perintah pembaruan yang lebih bermanfaat dicantumkan dan dijelaskan di sini: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

Jack Miller
sumber
Terima kasih banyak, saya punya masalah yang sama. Saya baru saja menyelesaikan masalah saya melalui prosedur Anda. Terima kasih banyak
McElie
Sama di sini, satu-satunya yang bekerja dan tidak perlu banyak hal yang ditulis di semua tempat
Harvey Lin
Jawaban paling berguna di sini!
Neo
13

Jika Anda memiliki masalah atau tidak memiliki paket apa pun, Anda cukup klik kanan di proyek Anda dan pilih " Kelola Paket NuGet untuk Solusi ... ". Setelah mengklik ini layar akan terbuka di mana Anda melihat bilah menu yang mengatakan "Kembalikan": Mengembalikan

Klik di atasnya dan paket yang diperlukan akan diinstal secara otomatis.
Saya percaya ini yang Anda cari, ini menyelesaikan masalah saya.

Yenthe
sumber
3
Tapi itu hanya membantu jika bilah peringatan itu muncul, itu tidak ada dalam kasus saya.
Nicholas Petersen
2
Sebuah langkah yang secara manual menginstal sebuah paket benar-benar kehilangan titik pemulihan otomatis.
Quarkly
Saya percaya ini mungkin harus menjadi jawaban yang diterima, itu adalah fungsi yang sama
user25064
1
Saya dapat melihat opsi untuk memulihkan dengan mengklik kanan solusinya. Itu ada di bawah "Kelola paket NuGet untuk solusi". Apakah trik untuk saya.
Daryl
1
Tidak berfungsi untuk saya - Saya melihat peringatan dalam solusi tentang paket nuget yang hilang, tetapi mengelola paket nuget tidak memberi saya opsi untuk mengunduhnya. Saya juga tidak bisa membangun dan memulihkan. Juga perintah restore tidak melakukan apa-apa.
Markus
7

Gunakan perintah ini untuk memulihkan semua paket

dotnet restore
Abdus Salam Azad
sumber
Bekerja dengan sempurna
JP..t
6

Saat memutakhirkan proyek dengan paket nuget dari Vx20XX ke VS2015, Anda mungkin memiliki masalah dengan paket nuget.

Contoh pesan kesalahan: Proyek ini mereferensikan paket NuGet yang hilang di komputer ini. Aktifkan Pemulihan Paket NuGet untuk mengunduhnya.

Pembaruan 2016-02-06: Saya memiliki tautan ke informasi tersebut tetapi tidak berfungsi lagi. Saya menduga bahwa jalan baru-baru ini telah memecahkan masalah ???

Saya memperbaiki masalah saya menulis sedikit program yang melakukan pemulihan paket MSBuild-Terpadu vs. Pemulihan Paket Otomatis

Anda dapat mengunduh alat yang bisa dieksekusi di sini .

Tolong beri tahu saya hasilnya :-)!

masukkan deskripsi gambar di sini

Kode sebagai referensi:

<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
sumber
Program ini bekerja dengan baik untuk mengkonversi satu ton proyek dalam solusi saya. Versi terbaru memiliki bidang "Direktori Paket NuGet" juga tetapi tampaknya tidak mempengaruhi output. Apa fungsinya?
Christoffer Årstrand
Maaf, saya tidak tahu. Saya menduga bahwa itu akan tergantung pada konten file. Mungkin Anda dapat melacak fungsi: "FromProjectFileRemoveNugetTarget" dan melihat apakah file Anda dapat terpengaruh? Maaf atas jawaban buruk itu, saya tidak ingat apa yang saya kodekan :-(! Saya hanya tahu bahwa saya menggunakan dua kali pada 2 komputer yang berbeda dengan sukses.
Eric Ouellet
5

Buka Referensi di studio visual dan lihat paket mana yang hilang. Sekarang klik kanan pada Solution in Visual dan klik pada folder terbuka di file explorer. Sekarang buka folder paket dan hapus folder paket yang hilang. Buka visual studio dan bangun solusinya. semua paket yang hilang akan dikembalikan. Harap tandai ini sebagai jawaban jika saya membantu.

Sandip Jaiswal
sumber
4

Saya kira untuk proyek asp.net 4 kami akan pindah ke pemulihan otomatis, jadi tidak perlu untuk ini. Untuk proyek yang lebih tua saya pikir sedikit pekerjaan untuk mengkonversi diperlukan.

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

Luca Morelli
sumber
Mungkin Anda benar. Saya baru saja mencoba membuat proyek menggunakan langkah-langkah yang persis sama di VS2013 dan "Aktifkan Pemulihan Paket Nuget" ada di sana. Terima kasih untuk tautannya, saya akan memeriksanya sekarang.
Dan Beaulieu
4

Pendekatan ini bekerja untuk saya:

  • Tutup VS2015
  • Buka solusi sementara di VS2013 dan aktifkan pengembalian paket nuget dengan mengklik kanan pada solusi (saya juga melakukan pembangunan kembali, tapi saya kira itu tidak diperlukan).
  • Tutup VS2013
  • Buka kembali solusi di VS2015

Anda sekarang telah mengaktifkan pengembalian paket nuget di VS2015 juga.

Halo Seljåsen
sumber
4

Saya menghadapi masalah yang sama ketika mencoba membangun proyek sampel gplus-quickstart-csharp-master .

Saya melihat dari dekat pesan kesalahan dan menemukan solusi untuk mengatasi kesalahan ini, mudah-mudahan, ini akan membantu.

  • Klik kanan pada file solusi dan buka di windows explorer.
  • Salin folder .nuget dengan NuGet.Config, NuGet.exe, NuGet.targets ( tautan unduh atau cukup salin dari proyek lain dan diganti)
  • Cobalah untuk membangun kembali solusi.

Nikmati !!

Manoj Verma
sumber
4

Ivan Branets pada dasarnya adalah apa yang memperbaiki ini untuk saya, tetapi beberapa detail lebih lanjut dapat dibagikan.

Dalam kasus saya, saya berada di VS 2015 menggunakan Auto Package restore dan TFS . Ini semua adalah hal yang cukup standar.

Masalahnya adalah ketika pengembang lain mencoba untuk mendapatkan solusi dari TFS, beberapa paket tidak sepenuhnya dipulihkan. (Kenapa, itu saya belum yakin.) Tapi folder paket berisi folder untuk referensi dan paket NuGet, tapi itu tidak diperluas (katakan folder lib yang berisi .dll hilang.) Setengah ini di sana, tetapi konsep yang tidak benar benar mencegah paket dari dipulihkan.

Anda akan mengenali ini karena referensi akan memiliki tanda seru kuning tentang tidak diselesaikan.

Jadi, solusi dari menghapus folder dalam paket menghilangkan paket mengembalikan memblokir masalah. Kemudian Anda dapat mengklik kanan pada tingkat solusi teratas untuk mendapatkan opsi untuk mengembalikan paket , dan sekarang itu akan berfungsi.

Greg
sumber
4

Tutup VS. Hapus semua yang ada di bawah folder paket. Buka kembali solusi Anda. Klik kanan pada proyek Anda, pilih 'Kelola paket nuget ...'. Anda akan melihat bilah kuning muncul di atas jendela 'Nuget Package Manager', meminta Anda untuk mengembalikan paket. Ini berhasil bagi saya.

Mandeep Janjua
sumber
3

Package Manager console (Visual Studio, Tools> NuGet Package Manager> Package Manager Console): Jalankan perintah Update-Package -reinstall -ProjectName di mana nama proyek yang terpengaruh seperti yang muncul di Solution Explorer. Gunakan Update-Package -reinstall dengan sendirinya untuk memulihkan semua paket dalam solusi. Lihat Paket-Pembaruan. Anda juga dapat menginstal ulang satu paket, jika diinginkan.

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

Andreas
sumber
1

Bisa juga hasil menjalankan program saat Anda mencoba menginstal paket. warnanya abu-abu jika Anda mencoba mengkliknya saat IIS bawaan berjalan di latar belakang.

Katushai
sumber
1

Jika ada orang lain yang menemukan masalah ini di Visual Studio 2017, pastikan proyek dibuka oleh file .sln dan bukan folder, karena visual studio tidak akan mengambil pengaturan jika dibuka oleh folder. Ini terjadi secara default jika Anda menggunakan layanan online Visual Studio untuk git.

Mendongkrak
sumber
1

Saya menggunakan msbuild /t:restore.


Kredit dan sumber:

Masalah saya dengan MSBuild Jadi saya mengikuti tautan @Vinney Kelly : Memigrasi solusi MSBuild-Terpadu ke Pemulihan Paket Otomatis

dan...

Itu bekerja LIKE A CHARM =]

MSBuild : gunakan msbuild /t:restoreperintah, yang mengembalikan paket paket yang tercantum dalam file proyek ( hanya PackageReference ). Hanya tersedia di NuGet 4.x + dan MSBuild 15.1+, yang disertakan dengan Visual Studio 2017 . nuget restoredan dotnet restorekeduanya menggunakan perintah ini untuk proyek yang berlaku.

Yitzchak
sumber
Dalam kasus saya / t: restore tidak membangun proyek untuk itu saya harus menggunakan / mengembalikan perintah
Kishan Vaishnav
1

Jika semuanya gagal (atau mungkin sebelum itu) Anda mungkin ingin memeriksa dan melihat apakah NuGet adalah sumber paket. Saya menginstal VS2017, dan TIDAK ada di sana secara default. Saya pikir itu agak aneh.

  1. Tools - NuGet Package Manager - Pengaturan Package Manager
  2. Klik 'Paket Sumber' di sebelah kiri dialog.
  3. Gunakan tanda tambah (+) untuk menambahkan URL Nuget: https://api.nuget.org/v3/index.json
douglas.kirschman
sumber
0

Saya harus menghapus paket folder close dan membuka kembali (VS2015) solusi. Saya tidak bermigrasi dan saya tidak memiliki paket diperiksa ke kontrol sumber. Yang bisa saya katakan adalah ada sesuatu yang kacau dan ini memperbaikinya.

Chris Hammons
sumber
0

Membantu saya melalui Tools >>> Nuget Package Manager >>> Umum lalu centang opsi Izinkan Nuget untuk mengunduh paket yang hilang dan secara otomatis memeriksa paket yang hilang saat membangun di studio visual .

masukkan deskripsi gambar di sini

Anjan Kant
sumber
0

Untuk proyek .NET Core , jalankan dotnet restoreatau dotnet buildperintah diNuGet Package Manager Console (yang secara otomatis menjalankan pemulihan)

Anda dapat menjalankan konsol dari

Peralatan> Manajer Paket NuGet> Konsol Manajer Paket

MOH3N
sumber
0

Saya menghadapi masalah yang sama. Saya mencoba menambahkan proyek MVC yang dibuat di Visual Studio 2015 ke solusi yang saya buat di Visual Studio 2019.

Sudah ada proyek di Visual Studio 2019, jadi menambahkan proyek yang sudah ada yang saya buat di VS 2015 memicu kesalahan yang sama. Saya sudah mencoba semua jawaban di sini tetapi tidak memperbaiki masalah.

Yang saya lakukan hanyalah meletakkan folder .nuget di folder solusi. Awalnya hirarki folder adalah ini:

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)

Jadi masalah ini diperbaiki ketika saya memindahkan folder .nuget pada folder solusi itu sendiri:

    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
sumber
0

VS 2019 Versi 16.4.4 Penargetan solusi .NET Core 3.1

Setelah mencoba hampir semua solusi yang diusulkan di sini, saya menutup VS. Ketika saya membukanya kembali, setelah beberapa detik semua kembali baik-baik saja ...

Andrea Antonangeli
sumber
-4

Lebih sederhana lagi, tambahkan folder .nuget ke solusi Anda dan 'Restore Nuget Packages' akan muncul (tidak yakin apakah nuget.exe perlu hadir agar bisa berfungsi).

Paxton
sumber