NuGet Paket Geri Yükleme Çalışmıyor


165

Bir bilgisayarda bir projeye teslim oldum, bir başkasına teslim aldım ve NuGet tarafından yüklenen ikili dosyaların eksik olduğunu gördüm. Onları kaynak kontrolüne de dahil edebilirim, ancak daha iyi bir çözüm var gibi görünüyor:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Bu talimatları izledim, şimdi olması gereken bir .nugetklasör var, .csproj dosyamda aşağıdaki girişlere sahip oldum:

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

ancak çözümümü yeniden oluşturduğumda, eksik paketler geri yüklenmiyor.

Neyi kaçırıyorum? Bu sorunu nasıl teşhis edebilirim?


Çıktı günlüğünde nuget.exe'nin tetiklendiğini görüyor musunuz?
Pranav

Ve daha da önemlisi: Çıktı günlüğünde herhangi bir hata görüyor musunuz?
maartenba

Yanıtlar:


272

Nuget paket yöneticisi konsolunda aşağıdaki komutları çalıştırarak paket geri yüklemesini yürütmeye zorlayabilirsiniz

Güncelleme Paketi

Çözümdeki her şeyin yeniden kurulmasını zorlar.


Update-Package -Reinstall -ProjectName myProj

MyProj projesinde her şeyin yeniden kurulmasını zorlar.

Not : Bu nükleer seçenektir. Bu komutu kullanırken, yüklediğiniz paketlerin aynı sürümlerini alamayabilirsiniz ve bu da sorunlara yol açabilir. Bunun, çözüm seviyesinin aksine proje düzeyinde meydana gelme olasılığı daha düşüktür.

-safeAynı Ana ve Küçük sürüm bileşenine sahip yeni sürümlere yükseltmeleri kısıtlamak için komut satırı parametre seçeneğini kullanabilirsiniz. Bu seçenek daha sonra eklenmiştir ve yorumlarda bahsedilen sorunların bazılarını çözmektedir.

Update-Package -Reinstall -Safe


7
@ NightOwl888, belki de her zaman DLL cehennem bağlama sorunları olmadıkça ve şansla çalışıyordu, ancak yeniden yükleyerek şansınızı bitirmediği sürece, bunu yapmanın hiçbir yolu olmaması gerektiği gibi nuget'e bildirilmesi gereken bir şey gibi geliyor.
Chris Marisic

4
@nightowl kaynak kontrolü kullanıyorsanız değişiklikleri geri almak o kadar da zor olmamalı.
ErikE

4
Buradaki en önemli özellik, paket sürümlerinin korunmamasıdır, bu nedenle en son paket sürümü yüklenecektir. Projeniz yeni bir sürüm ile uyumlu değilse bu bir sorun olabilir ..
JDandChips

4
Evet, Update-Package -Reinstall benim için çalıştı. IDE'nin neden yapmadığını bilmiyorum. Her şey doğru ayarlanmış. Ughghh, yemin ederim, NuGet hem iyi hem de can sıkıcı.
Jeremy Ray Brown

2
Cevabınızın ALTINDA "önemli! Bu projenizi yok edebilir" eklemek için güzel!
devman

25

Bu gönderiye rastlayan diğerleri için bunu okuyun.

NuGet 2.7+ bizi Otomatik Paket Geri Yükleme ile tanıştırdı . Bu, MSBuild sürecine müdahale etmediği için çoğu uygulama için çok daha iyi bir yaklaşım olarak kabul edilir. Daha az baş ağrısı.

Başlamanız için bazı bağlantılar:


2
NuGet'in geçerli sürümüne uygun bir yanıt için teşekkür ederiz.
Eric J.

20

Aşağıdakilerden birini seçmeniz gerekir:

Tüm çözüm projelerinde bir paketi adına göre yeniden yükleme:

Update-Package –reinstall <packageName>

Bir paketi adına göre yeniden yüklemek ve tüm çözüm projelerinde bağımlılıklarını yok saymak:

Update-Package –reinstall <packageName> -ignoreDependencies

Bir projede bir paketi adına göre yeniden yükleme:

Update-Package –reinstall <packageName> <projectName>

Belirli bir projedeki tüm paketleri yeniden yükleme:

Update-Package -reinstall -ProjectName <projectName>

Tüm paketleri bir çözüme yeniden yükleme:

Update-Package -reinstall 

Benim sorun hızlı ve kirli tarzı çözüldü.
blackorchid

20

Eksik paketleri / ikili dosyaları olan projede paket geri yükleme modunu etkinleştirdiniz mi? Geri yükleme modunu etkinleştirirken paketlerin doğru şekilde yüklenmesini gerektiren bilinen bir sorun var:

http://nuget.codeplex.com/workitem/1879


Orijinal bağlantı öldü; bu bir yedek olabilir: https://github.com/NuGet/Home/issues/1968


3
Bağlantı için teşekkürler. Eksik paketleri / ikili dosyaları olan bir projede paket geri yükleme modunu etkinleştirmek yaygın bir durumdur. Paketleriniz yoksa, onları almak istediğiniz zamandır. Kullanım durumu başarısız.
Anthony

2
"Eksik paketleri olan projede paket geri yükleme modunu etkinleştir" dediğinizde ne demek istiyorsunuz? Bunu yapmak için çalıştırmam gereken bir konsol komutu var mı?
CodeWarrior

90
NuGet beni günlük olarak başarısızlığa uğrattı, tamamen hor görüyorum.
Jammer

14

VS 2017

Araçlar> NuGet Paket Yöneticisi> Paket Yöneticisi Ayarları> Genel "Tüm NuGet Önbelleklerini Temizle" ye tıklayın


Kaynak kontrolü dışında bir çözüm (DevOps / Git ile Visual Studio Team Explorer kullanılarak yönetilir) kontrol edilirken eksik referanslar ve geri yükleme paketleri hiçbir şey yapmadığı için derlemeler mümkün olmadı. Bu çözüm, bu durum için doğru çözümdü.
PJRobot

12

İki senaryoda bu sorunla karşılaştım.

İlk olarak, msbuild.exe kullanarak komutumu çözümümden oluşturmaya çalıştığınızda. İkincisi, sln ve içeren projeleri TFS ve CI kullanarak derleme sunucumda oluşturmaya çalıştığımda.

Referansların eksik olduğunu iddia eden hatalar alıyorum. Hem yerel oluşturma dizinimi hem de TFS sunucusunu incelerken, / Packages klasörünün oluşturulmadığını ve nuget paketlerinin kopyalanmadığını görüyorum. Alexandre'ın cevabında listelenen talimatları takip ederek http://nuget.codeplex.com/workitem/1879 da benim için çalışmadı.

VS2010 aracılığıyla Geri Yükleme Paketlerini etkinleştirdim ve yapıların yalnızca VS2010 içinden çalıştığını gördüm. Yine, msbuild kullanarak başarısız olur.Çözümüm tamamen geçersizdir, ancak ortamım için bu, yerel olarak bir komut satırından ve TFS'deki bir CI derlemesinden çalışan her şeyi aldı.

. \ Nuget girdim ve bu satırı .nuget \ NuGet.targets dosyasında değiştirdim:

dan:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

to: (değişkenlerin tırnak işaretleri olmadan dikkat edin)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

Dizinlerimin içinde boşluklar varsa, bu başarısız olur, ancak dizinlerimde boşluklar olmadığını ve bu geçici çözümün yapılarımı başarıyla tamamlamasını sağladı ... şimdilik.

Derlemenizde tanı düzeyi günlük kaydını açmanın msbuild tarafından hangi komutların yürütüldüğünü göstermeye yardımcı olacağını söyleyeceğim. Bu beni hedef dosyaya geçici olarak hacklemem için yönlendirdi.


Ben çift tırnak ile sorunu vardı ve aynı düzenleme yapmak zorunda kaldı. Çok sinir bozucu!
Greg

5

Başka bir şey işe yaramadıysa, şunu deneyin:

  1. Projeyi kapatın.
  2. Çözüm klasörünüzdeki paketler klasörünü silin.
  3. Project'i tekrar açın ve Nugget Paketlerini yeniden yükleyin.

Benim için çalıştı ve denemesi kolay.


2
Bu benim için çalıştı. 3. adımda, paketleri manuel olarak geri yüklemek zorunda kalmadım - projeyi açtığımda otomatik olarak geri yüklendiler.
Tawab Wakil

5

Diğer cevapların hiçbiri sizin için işe yaramazsa, benim için işe yarayan tek şey aşağıdakileri deneyin:

.csprojDosyanızı bulun ve bir metin düzenleyicide düzenleyin.

Dosyanızdaki <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">etiketi bulun ve .csprojtüm bloğu silin.

Çözüme tüm paketleri yeniden yükleyin:

Update-Package -reinstall

Bundan sonra nuget paketleriniz geri yüklenmelidir, bu sadece projenizi farklı bir yere taşıdığınızda ortaya çıkan bir saçak olabilir.


Bu beni tamamen delirmekten kurtardı. Teşekkürler!
Jeff Hay

4

Bu sorunla karşılaşabilecek başkaları için, Visual Studio'yu kapatarak ve projeyi yeniden açarak sorunu çözebildim. Proje yüklendiğinde, başlatma aşaması sırasında paketler geri yüklendi.


4

Benim için boş bir etiket vardı .csproj NuGetPackageImportStamp

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

İdeal olarak bazı geçerli GUID'ler içermelidir.

Yukarıda belirtilen etiketi kaldırmak ve daha sonra "Nugets Restore" benim için çalıştı.


1

Bazen garip bir şey olur ve Visual Studio'yu otomatik olarak geri yüklemek için kullanmak işe yaramaz. Bu durumda NuGet Paket Yöneticisi Konsolu'nu kullanabilirsiniz. Visual Studio'da Araçlar -> NuGet Paket Yöneticisi -> Paket Yöneticisi Konsolu'ndan açılır . Konsol içindeki komutlar basittir. Bir komut yazarken bağlam yardımı almak için sadece düğmeye basın ve yazdığınız harflerle başlayan tüm seçenekleri verecektir. Dolayısıyla, bir paket kurulmamışsa, örneğin log4net, aşağıdaki komutu yazın:

Yükleme Paketi log4net

Yüklenecek sürümü belirtmek, bir paketi güncellemek, bir paketi kaldırmak vb. Gibi çok daha fazlasını yapabilirsiniz.

Konsolu Visual Studio garip gibi davrandığında bana yardım etmek için kullanmak zorunda kaldım.


1

Otomatik Paket Geri Yükleme aşağıdaki nedenlerden biriyle başarısız olur:

  1. NuGet.exe ve NuGet.targets dosyalarını çözümün .nuget klasöründen (çözüm kök klasörünüzde bulunabilir) kaldırmadınız
  2. Otomatik paket geri yüklemeyi Araçlar >> Seçenekler >> Nuget Paket Yöneticisi >> Genel ayarlarından etkinleştirmediniz.
  3. Tüm projelerinizdeki başvuruları Nuget.targets dosyasına el ile kaldırmayı unuttunuz
  4. Visual Studio'yu yeniden başlatmanız gerekir (yeniden başlatmadan önce işlemin görev yöneticinizden öldürüldüğünden emin olun).

Aşağıdaki makale 1-3 puanları hakkında daha ayrıntılı bilgi vermektedir: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
# 1 noktanızla ilgili olarak, sağladığınız bağlantı önerilerinizle çelişiyor: "TFS kullanıyorsanız 1. NuGet.exe ve NuGet.targets dosyalarını çözümün .nuget klasöründen kaldırın 2. Atlamaya devam etmek için NuGet.Config dosyasını saklayın kaynak kontrolüne paketler ekliyoruz. "
Andrew Dennison

1

Sistemimde Sistem Geri Yükleme işlemini gerçekleştirdikten sonra yaklaşık iki gün yedekleyen NuGet paketlerini kırdım. (Bu arada NuGet paketleri kurulmuştu.) Düzeltmek için kullanıcı profilimdeki .nuget \ Packages klasörüne gitmem, paketleri bulmam ve silmem gerekiyordu. Ancak bundan sonra Visual Studio paketleri taze olarak indirir ve referans olarak düzgün bir şekilde ekler.


1

Sıfırdan yeni bir proje oluştururken bulduğum en iyi geçici çözüm, daha sonra kodla tüm kaynak dosyaları içe aktarın. Projem o kadar karmaşık değildi, o yüzden hiçbir sorunum yoktu.


1

Benim durumumda diğer çözümlerin hiçbiri işe yaramadı:

AspNetCore bağımlılıkları yüklenmiş / kaldırılmış ve önbelleğe alınmıştır. 'AspNetCore.All' düzgün bir şekilde güncellemeyi / yeniden yüklemeyi / kaldırmayı reddeder. Ve ne yaptığımdan bağımsız olarak, önbelleğe alınmış bağımlılıkları kullanacaktı (uyumlu olmadığı), çünkü daha yüksek bir versiyonlardı.

  1. Herşeyi Yedekle. Yeniden yüklemeniz gereken Bağımlılıklar listesine dikkat edin, VisualStudio'dan çıkın
  2. Tüm .proj dosyalarını bir metin düzenleyicide açın ve tümünü kaldırın PackageReference
  3. Her projede bin, objklasörleri silin
  4. Çözümde bulduğunuz tüm "paketler" klasörlerini silin.
  5. Çözümü açın Tools > Nuget Package Manager > Package Manager Settingsve içine gidin Clear all Nuget caches. Konsolu kontrol edin, çünkü bazı öğeler kaldırılamayabilir - klasör yolunu kopyalayın ve visual studio'dan çıkın.
  6. Bu klasördeki her şeyi silin Çözümü yeniden açın ve sıfırdan tekrar nuget paketleri yüklemeye başlayın.

Bu hala işe yaramazsa, tekrarlayın, ancak sürücünüzü Windows Gezgini'nde arayın nugetve önbelleğe bakan bir şeyi silin.


0

vs2015 etkin nuget geri yükleme sorunu yok. Çözümüm:

  1. klasör .nuget ekle, NuGet.Config ve NuGet.targets dosyalarını Dizin .nuget'e ekleyin

  2. her proje dosyası ekleyin: build

  <RestorePackages>true</RestorePackages>

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

Bunu yapmanın eski yolu budur. @Davenewza cevabını ve blog.davidebbo.com/2014/01/…
timB33

0

Karşılaştığınız hata benimki gibi "uzak sunucuya bağlanamıyorsa", yukarıdaki yorumlarda verilen kontrollere ek olarak bu kontrolü de almanızda fayda var.

Paketlerin indirilebileceği 2 NUGET Paket Kaynağı olduğunu gördüm (Araçlar-> Nuget Paket Yöneticisi-> Paketleyici Yöneticisi Ayarları içinde). Paket Kaynaklarından biri çalışmıyor ve Nuget sadece bu kaynaktan indirmeye çalışıyordu.

İndirmek için paket kaynağını değiştirdikten sonra işler yerine oturdu : https://www.nuget.org/api/v2/ EXPLICTLY ayarlarda


0

Benim durumumda, durdurulmuş bir Nuget geri yükleme girişimi çözümdeki packages.configdosyalardan birini bozmuştu . Git çalışma ağacımı kontrol etmeden önce bunu keşfetmedim. Dosyadaki değişiklikleri geri aldıktan sonra, Nuget geri yüklemesi tekrar çalışıyordu.


0

Nuget geri yüklemesinin çalışması için bir kısayol vardır, 1. VS Tools seçenekler menüsünde internet bağlantısının veya Nuget URL'lerinin uygun olduğundan emin olun 2. Çözümdeki .nuget veya nuget klasörüne bakın, aksi takdirde nuget.exe'yi almak için herhangi birinden kopyalayın

  1. Varsa, paketleri SİL klasörü

  2. Paket yöneticisi konsolunu açın ve bu komutu yürütün

    • nuget.exe tam yolunu yapıştırın .sln dosyasının tam yolunu RESTORE!
  3. Build eksik referanslar için geçemediyse Install-pacakge komutunu kullanın. Umarım Yardımcı Olur (HIH)

0

VS2017'de, çözümü => Open CommandLine => Geliştirici Komut Satırı'na sağ tıklayın.

Bu kez açıldığında, yazın (ve sonra enter tuşuna basın)

dotnet restore

Bu, herhangi bir / tüm paketleri geri yükleyecek ve ne yapıldığı güzel bir konsol çıktısı alacaksınız ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.