hapus paket nuget restore dari solusi

148

Saya menambahkan fitur pemulihan paket nuget baru-baru ini ke solusi menggunakan 'Aktifkan Pemulihan Paket NuGet': http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Namun itu merusak server build saya dan saya tidak punya waktu untuk memperbaikinya, jadi saya ingin menghapusnya. Tidak ada pilihan untuk itu sejauh yang saya tahu, jadi saya menghapus baris berikut secara manual dari semua file * .csproj saya:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

Masalahnya sekarang adalah bahwa setiap kali file * .csproj saya dicentang atau membuka solusi saya, saluran tersebut secara otomatis ditambahkan lagi, merusak build saya jika saya tidak sengaja memeriksanya di :(

Ada ide bagaimana saya bisa menghapusnya secara permanen?

UPDATE: meskipun jawaban di bawah ini masih terus datang kembali ketika membuka solusi, siapa pun dengan masalah yang sama?

Wiebe Tijsma
sumber
2
Tidak bisakah Anda mengembalikan perubahan setet di kontrol Sumber?
Betty
baik itu perubahan yang cukup besar, tetapi berkat komentar Anda, saya memang telah melihatnya, dan tampaknya itu juga menambahkan folder .nuget di jalur solusi, menghapusnya juga untuk melihat apakah itu memperbaiki masalah
Wiebe Tijsma
Apakah Anda berhasil memperbaiki server build? (dan apakah itu teamcity?), karena jalur proyek impor yang Anda kutip di atas adalah apa yang menyebabkan teamcity saya gagal dibangun
Baldy
@Baldy Tidak, kami menggunakan TFS Build dan saya tidak benar-benar mencari solusi, hanya menghapusnya (masih berencana untuk menyelaminya nanti)
Wiebe Tijsma
3
Saya telah membuat masalah bagi tim NuGet untuk memperbaiki masalah ini. Silakan pilih di nuget.codeplex.com/workitem/3756
deadlydog

Jawaban:

214

Saya tidak terlihat sangat baik, ada properti lain yang ditambahkan ke file proyek:

<RestorePackages>true</RestorePackages>

Hanya perlu menghapus ini dan semua baris ini secara manual dari semua file * .csproj:

  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />

MEMPERBARUI:

Ternyata itu bugger kecil yang persisten, jika Anda mengedit file proyek Anda secara manual, pastikan untuk menutup solusi dan menghapus semua baris dari proyek sekaligus , jika tidak mereka hanya ditambahkan lagi begitu proyek memuat ulang ...

UPDATE2:

Hapus juga folder .nuget dari root solusi

UPDATE3:

Versi NuGet yang lebih baru menambahkan bagian lain yang perlu Anda hapus:

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

Pembaruan4

Di dalam yang NuGet.Targetsterletak di .nugetfolder, ada bagian lain yang ditambahkan ke proyek baru ... alihkan ke false.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>
Wiebe Tijsma
sumber
7
Saya telah menemukan bahwa ada juga <Import Project="$(SolutionDir)\.nuget\nuget.targets" />di akhir file .csproj yang perlu dihapus secara manual.
TimDog
6
HA! mundur perlahan :)
TimDog
5
Hal ini telah mengganggu saya juga. Jika proyek Anda ada dalam berbagai solusi, fitur pemulihan paket menyebabkan gundukan masalah.
Damian
7
"Pastikan Anda menutup solusinya" sebenarnya sangat penting di sini, karena VS2010 tampaknya men-cache file csproj / msbuild (tanpa mengambil modifikasi tertentu). Saya tidak melihat perilaku ini di VS2012, tetapi ini telah mengganggu saya banyak ketika memodifikasi file-file ini dalam VisualStudio.
Xavier Decoster
4
Saya telah membuat masalah bagi tim NuGet untuk memperbaiki masalah ini. Silakan pilih di nuget.codeplex.com/workitem/3756
deadlydog
48

Untuk menonaktifkan Pemulihan Paket Nuget:

  1. Hapus folder .nuget
  2. Hapus baris tertentu dari semua file .csproj

Baris untuk dihapus:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<RestorePackages>true</RestorePackages>

Catatan: Pastikan Anda melakukan semua perubahan dalam sekali jalan sebelum memuat ulang solusi atau solusi itu akan menambahkannya kembali.

Ini didasarkan pada artikel berikut: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Juga, Anda mungkin ingin memeriksa ulang bahwa opsi ini dinonaktifkan: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

angularsen
sumber
Saya telah membuat masalah bagi tim NuGet untuk memperbaiki masalah ini. Harap pilih di nuget.codeplex.com/workitem/3756
deadlydog
1
Terima kasih, bagi saya itu hanya menghilangkan pilihan itu
Maarten Kieft
Saya telah menggunakan alat IFix dengan sukses besar dalam membersihkan repo dengan banyak proyek. Ini pada dasarnya mengotomatiskan langkah-langkah ini. visualstudiogallery.msdn.microsoft.com/...
angularsen
Folder .nuget disembunyikan dan Anda harus menghapusnya dari direktori bukan hanya proyek.
Erik Bergstedt
8

Bukankah ini pengaturan di sini?

Pilihan ... -> Pengelola Paket Nuget -> [hapus centang] Izinkan Nuget untuk mengunduh paket yang hilang

masukkan deskripsi gambar di sini

Saya menggunakan Visual Studio Professional + Resharper 8.2

orad
sumber
Saya menghapus folder paket dan membersihkan cache paket untuk memperbaiki masalah saya. Terima kasih!
Tresto
1
Tidak, itu tidak memperbarui file .proj setelah - jadi masalahnya kembali - tetapi bagus juga untuk melakukannya di sini :-)
schmoopy
Jendela output menunjukkan ini sambil membangun: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'itu hanya konfirmasi bahwa ini harus menjadi cara untuk pergi.
Muslim Ben Dhaou
1
Ini tidak terkait dengan Pemulihan Paket Nuget. VS versi lama memiliki item menu konteks untuk proyek-proyek berjudul "Aktifkan Pemulihan Paket Nuget" yang akan membuat .nuget/folder dan memodifikasi Anda .csprojuntuk referensi .targetsfile. Anda seharusnya mengkomit nuget.exeke VCS Anda (eww, menyelesaikan masalah yang nuget selesaikan!) Dan kejelekan seperti itu. Saat ini, msbuild /restoreada dan mengembalikan paket bawaan VS. OP bertanya bagaimana cara menghapus cara lama yang buruk dalam melakukan sesuatu — bukan bagaimana cara menonaktifkan dukungan paket bawaan bawaan VS yang benar.
binki
5

Solusi yang saat ini menggunakan pemulihan paket MSBuild-Integrated dapat dimigrasi ke Pemulihan Paket Otomatis. Dari apa yang saya pahami, ini seharusnya membantu mereka yang mengalami masalah pembangunan CI. (Tolong koreksi saya jika saya salah).

Silakan merujuk ke dokumen di situs web nuget: Migrasi solusi MSBuild-Integrated untuk menggunakan Pemulihan Paket Otomatis di http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Ada informasi di sana untuk mengkonversi dengan dan tanpa TFS.

David Ebbo juga memposting beberapa informasi di http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

James Bradt
sumber
3

NuGet memiliki posting blog tentang migrasi ke pengembalian paket otomatis: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Ada skrip powershell yang dirujuk dalam posting blog yang akan membantu menghapus baris yang diperlukan secara otomatis (dan secara rekursif): https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

Menawarkan Nonaktifkan Paket Pemulihan Paket NuGet langsung ditandai sebagai Tidak Akan Perbaiki: https://nuget.codeplex.com/workitem/1883

Nitin Agarwal
sumber
2

Saya mengikuti solusi yang diterima tanpa hasil menggunakan 2012. Ini berhasil,

  1. Tutup sepenuhnya VS
  2. Perbarui <RestorePackages>true</RestorePackages>ke <RestorePackages>false</RestorePackages>dan hapus <Import Project="$(SolutionDir)\.nuget\nuget.targets" />baris
  3. Juga mengganti nama nuget.exemenjadinuget.exe.NotExe
Daryl
sumber
2

Bagi siapa pun yang masih perlu membersihkan proyek menggunakan pemulihan paket NuGet gaya lama, alat IFix yang tersedia di sini mengotomatiskan proses.

Jalankan saja penginstal ( IFixakan ditambahkan ke PATH) dan kemudian jalankan yang berikut:

IFix nugetrestore --fix

Anda dapat menjalankannya dalam mode periksa terlebih dahulu untuk melihat apa yang akan dibersihkan:

IFix nugetrestore --check
Simon Fox
sumber
1

Saya memiliki masalah yang sama. Apa yang akhirnya saya lakukan: 1) masuk ke setiap proyek .csproj file dalam solusi, buka di notepad kemudian dihapus bagian dari xml dan disimpan.

2) Lalu saya menghapus semua file package.config di seluruh solusi.

3) Kemudian saya harus menghapus folder .nuget dan paket.

Pada titik ini, saya memiliki solusi gratis yang sepenuhnya NuGet.

4) Kemudian saya secara manual mereferensikan DLL yang diperlukan dan tekan kompilasi dan solusinya berjalan seperti jagoan tanpa paket NuGet diperlukan.

Andy30acre
sumber
1

Pergi ke direktori solusi Anda di mana Anda memiliki [$(SolutionDir)\.nuget\nuget.targets] .nugetfolder dan nuget.targetsfile di bawahnya menghapus folder, dan mengubah garis hapus dari Anda csproj untuk sekali terakhir kali.

Masalahnya tidak akan kembali mengganggumu lagi.

arvind
sumber
1

Lepaskan packages.config berkas dalam solusi Anda.

Latensi
sumber
0

Saya tidak sengaja mengaktifkan opsi "paket pemulihan" ini saat membuka proyek saya di VS2012 RC dan mulai mendapatkan kesalahan yang terlihat seperti:

"Kesalahan 1 Tidak dapat menemukan 'C: \ FolderX \ SomeProject.nuget \ nuget.exe'"

Untuk memperbaiki kesalahan saya ikuti instruksi di atas, buka buka setiap file proyek di notepad dan hapus baris RestorePackage itu.

Dmitry Lyalin
sumber
0

Saya dapat menyelesaikan masalah ini dengan mengambil langkah-langkah ini:

1) pastikan Anda mengambil cadangan dari semua perubahan file yang Anda periksa saat ini.

2) secara fisik hapus folder solusi dari C: \ (jalur yang dipetakan ke TFS).

3) dapatkan yang terbaru dari TFS untuk solusi Anda.

4) salin (jika ada) perubahan Anda dari cadangan yang Anda ambil pada langkah-1.

berharap itu bisa membantu!

Rajesh
sumber
-2

Saya mengalami masalah yang sama persis dan mencoba untuk menghapus semua tag .nuget dan RestorePackage dari file proyek tetapi satu proyek tidak akan memuat ulang tidak peduli seberapa teliti saya memeriksanya untuk tag .nuget dan RestorePackages. Saya kira ada beberapa referensi tersembunyi di suatu tempat.

Pada akhirnya lebih mudah hanya menyalin file dan membuat proyek baru dan mengimpornya ke solusi.

Peter
sumber
-8

Nuget menyebalkan. Hapus saja nuget dan hapus atau komentar elemen paket dari packages.config di direktori root proyek di mana ini menjadi masalah. Gunakan referensi langsung ke beberapa folder lib sebagai gantinya.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>
Igor N
sumber
Ini menyebalkan, seperti produk lainnya, jika Anda tidak tahu bagaimana menggunakannya dan tidak berusaha untuk memahaminya.
Wiebe Tijsma
Masa depan, tetapi dalam pendapat saya menyikut tidak memberi Anda cukup kontrol atas proyek Anda. GUI Nuget juga memerlukan beberapa peningkatan serius. 1. Ini tidak intuitif, 2. Sulit untuk mengelola paket 3. Sulit untuk mematikan mengembalikan 4. Unduhan paket yang tidak dibutuhkan 5. Kadang-kadang tidak dapat mengembalikan pacakges
Igor N
Saya setuju sampai batas tertentu, meskipun saya pikir itu benar-benar mengalahkan tidak memiliki manajer paket sama sekali. Sepertinya mereka sedang mengerjakan pemutakhiran GUI serius untuk nuget 3.0: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma