Visual Studio'da NuGet paketlerini yeniden yükleme ve güncelleştirme

Bazen bir Visual Studio projesinde paket başvuruları kesilebilir. Paketin aynı sürümünün kaldırılması ve yeniden yüklenmesi genellikle başvuruları çalışma sırasına geri yükler. Güncelleştirilmiş bir sürümü yükleyen bir paketi güncelleştirmek de sorunu çözebilir. Bu makalede, bozuk paket başvurularını ve bozuk projeleri ele almak için NuGet paketlerinin nasıl yeniden yüklenip güncelleştirildiği açıklanır.

Not

Bu makaledeki yönergeler yalnızca packages.config yönetim biçimini kullanan projeler için geçerlidir. PackageReference projeleri için geri yükleme işlemi bozuk başvuruları otomatik olarak düzeltir.

Genel senaryolar

Visual Studio projenizde bozuk paket başvuruları ile karşılaşabileceğiniz bazı yaygın senaryolar aşağıdadır.

Senaryo Açıklama Çözüm
Paket geri yüklemeden sonra bozuk başvurular Visual Studio projenizi açar ve NuGet paketlerini geri yüklersiniz, ancak bozuk paket başvuruları kalır. Başvuruları düzeltmek için her paketi ayrı ayrı yeniden yüklemeyi deneyin.
Silinen dosyalar nedeniyle proje bozuk Silinen (eksik) paket dosyaları projenizin bozulmasına neden olur. NuGet, paketlerden eklediğiniz öğelerin silinmesini engellemez. Paketten yüklenen içerikleri yanlışlıkla değiştirmek ve projenizi kesmek kolay olabilir. Projenizi geri yüklemek için etkilenen paketleri yeniden yüklemeyi deneyin.
Paket güncelleştirmeden sonra bozuk proje Paket güncelleştirmesi projenizi sonlandırıyor. Bağımlılık paketine yönelik yardımcı güncelleştirmeler genellikle bu tür bir hataya neden olur. Bağımlılığın durumunu önceki çalışma sırasına geri yüklemek için belirli bağımlı paketi yeniden yüklemeyi deneyin.
Proje yeniden hedefleme veya yükseltmeden sonra bozuk başvurular Proje yeniden hedefleme veya yükseltme işlemi paket başvurularının bozulmasına neden olur. Projenizi yeniden hedefledikten sonra NuGet bir derleme hatası gösterir. Derleme uyarıları, yeniden yüklenmesi gerekebilecek paketleri listeler. Veya projenizi yükseltdikten sonra NuGet, proje yükseltme günlüğünde bir hata gösterir. Günlük dosyasında yeniden yüklenmesi gerekebilecek paketler listelenir. Hedef çerçevedeki bir değişiklik nedeniyle oluşan sorunları çözmek için bir veya daha fazla paketi yeniden yüklemeyi deneyin.
Paket değişiklikleri geliştirme aşamasında Paket yazarlarının genellikle değişikliklerini test etmek için geliştirmekte oldukları paketin aynı sürümünü yeniden yüklemeleri gerekir. Visual Studio'daki NuGet Paket Yöneticisi Konsolu, paketleri güncelleştirmek ve yeniden yüklemek için esnek seçenekler sağlar. Geliştirme aşamasındaki bir paketi yeniden yüklemek için komutunu kullanabilirsiniz Update-Package -reinstall .

Uygulama seçenekleri

NuGet paketlerini güncelleştirmek ve yeniden yüklemek için çeşitli seçenekleriniz vardır. Yaygın yöntemler arasında NuGet Paket Yöneticisi kullanıcı arabirimi seçenekleri, NuGet Paket Yöneticisi Konsolu ve NuGet (Komut Satırı Arabirimi) CLI bulunur.

Paket Yöneticisi UI

Konsol arabirimine ek olarak, Paket Yöneticisi kullanıcı arabirimi paketleri yüklemek, güncelleştirmek ve kaldırmak için menü seçenekleri de sağlar.

  • Paketi güncelleştirmek için Güncelleştirmeler sekmesini açın, bir veya daha fazla paket seçin ve ardından Güncelleştir'i seçin.

  • Paketi yeniden yüklemek için önce paketi kaldırın ve sonra yeniden yükleyin. Yüklü sekmesini açın, bir paket seçin ve adını kaydedin, ardından Kaldır'ı seçin. Gözat sekmesine geçin ve paket adını arayın, paketi seçin ve ardından Yükle'yi seçin.

Paket Yöneticisi Konsolu

Araçlar>NuGet Paket Yöneticisi Paket Yöneticisi Konsolu altında Paket Yöneticisi> Konsolu'na erişebilirsiniz.

  • Paketi güncelleştirmek için Paket Yöneticisi Konsolu komutu sağlarUpdate-Package.

  • Bir paketi yeniden yüklemek için parametresiyle -reinstall aynı komutu kullanabilirsiniz. Yapılandırmanızla uyumluysa bu yaklaşım en kolay seçenektir.

Daha fazla bilgi için Güncelleştirme-Paket komutu ve Paket yeniden yükleme konuları bölümlerine bakın.

NuGet CLI

NuGet CLI, nuget.exeWindows için tüm NuGet özelliklerini sağlayan komut satırı yardımcı programıdır.

  • Yüklü bir paketi güncelleştirmek için komutunu çalıştırın nuget update .

  • Tüm NuGet paketlerini yeniden yüklemek için paket klasörünü silin ve komutunu çalıştırın nuget install .

  • Tek bir paketi yeniden yüklemek için paket klasörünü silin ve ardından bağımsız değişkeninin nuget install <id> belirli bir paketin <id> kimliği olduğu komutu çalıştırın.

Not

Dotnet CLI için eşdeğer yordam gerekli değildir. komutunu çalıştırdığınızda dotnet restore dotnet CLI bağımlılıkları belirlemek ve gerekli NuGet paketlerini indirmek için NuGet kullanır. Daha fazla bilgi için bkz . Dotnet CLI ile NuGet paketlerini geri yükleme.

Yükseltme sürümleriyle ilgili kısıtlamalar

Varsayılan olarak, bir paketi yeniden yüklemek veya güncelleştirmek her zaman paket kaynağından sağlanan en son sürümü yükler. Ancak, yönetim biçimini kullanan packages.config projeler özellikle izin verilen NuGet paketi sürüm aralığını sınırlayabilir.

Uygulamanızın paket API'sindeki önemli bir değişiklik nedeniyle yalnızca paketin 1.x sürümüyle çalıştığını ancak sürüm 2.0 veya üzeriyle çalışmadığını varsayalım. Uygulamanızın beklendiği gibi çalıştığından emin olmak için NuGet paket yükseltmelerini yalnızca 1.x sürümlerine kısıtlamak istiyorsunuz. Sınırlama, uygulamanızı bozabilecek yanlışlıkla güncelleştirmeleri önlemeye yardımcı olur.

Kısıtlama ayarlamak için dosyayı bir metin düzenleyicisinde açın packages.config . Sınırlamak istediğiniz bağımlılığı bulun ve istediğiniz sürüm aralığıyla allowedVersions özniteliğini ekleyin.

Aşağıdaki örnekte, özniteliğini [1,2)olarak ayarlayarak sürüm 1.x'e güncelleştirmeleri kısıtlama gösterilmektedirallowedVersions:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="ExamplePackage" version="1.1.0" allowedVersions="[1,2)" />

    <!-- ... -->
</packages>

Her durumda, Paket sürümü oluşturma bölümünde açıklanan gösterimi kullanın.

Update-Package komutu

Paket Yöneticisi Konsolu'ndaki Update-Package komutu, bir paketi yeniden yüklemenin ve bozuk başvuruları ele almanın en kolay yoludur. Ancak bu yaklaşım tüm senaryolarda kullanılamaz. Yüklü bir paketi güncelleştirmek için komutunu kullanabilirsiniz, ancak ilk yüklemeyi yapamazsınız. Yapılandırmada henüz yüklü olmayan bir paketi güncelleştirmeye veya yeniden yüklemeye çalışırsanız, komut bir hata döndürür. Komutuyla çalışmadan önce Paket yeniden yüklemeyle ilgili dikkat edilmesi gerekenler bölümünü gözden geçirmeyi unutmayın.

PackageReference kullanarak bir proje veya çözümdeki paketleri güncelleştirmek her zaman paketin en son sürümüne (yayın öncesi paketler hariç) güncelleştirir. Yönetim biçimini kullanan packages.config projeler, yükseltme sürümlerindeki kısıtlamalar bölümünde açıklandığı gibi yükseltme sürümlerini sınırlayabilir.

Aşağıdaki bölümlerde komutuyla çalışmaya yönelik örnekler verilmiştir.

Paket yeniden yükleme seçenekleri

Yeniden yükleme yapmak için komutunun temel kullanımı aşağıdadır. Belirli bir NuGet paketini tanımlamak için isteğe bağlı -Id parametresini kullanabilirsiniz.

# Reinstall the package named <package_name>
Update-Package -Id <package_name> –reinstall

komutunu kullanmak Update-Package , bir paketi kaldırıp aynı sürüme sahip NuGet galerisinde aynı paketi bulmaya çalışmaktan daha kolaydır.

Paket seçeneklerini güncelleştirme

Parametresi olmayan -reinstall aynı komut, varsa paketi daha yeni bir sürüme güncelleştirir. Belirtilen paket bir projede zaten yüklü değilse komut bir hata döndürür.

# Update the package named <package_name>
Update-Package <package_name>

Proje ve çözüm seçenekleri

Varsayılan olarak, Update-Package komut bir çözümdeki tüm projeleri etkiler. Eylemi belirli bir projeyle sınırlamak için parametresini -ProjectName kullanın. Visual Studio Çözüm Gezgini'da gösterildiği gibi projenin adını belirtin.

Aşağıdaki komut, çözümünüzdeki belirli bir proje için bir NuGet paketini yeniden yükler. Yeniden yüklanacak belirli NuGet paketinin adı parametresinde <package_name> sağlanır.

# Reinstall the package named <package_name> in MyProject only
Update-Package <package_name> -ProjectName MyProject -reinstall

Projenizdeki tüm paketleri yeniden yüklemek istiyorsanız parametresini -ProjectName kullanın ve belirli bir paket belirtmeyin. Bu örnekte gösterildiği gibi projenizdeki paketleri güncelleştirmek için de aynı yaklaşımı izleyebilirsiniz:

# Update all packages in MyProject only
Update-Package -ProjectName MyProject

Çözümdeki tüm paketleri güncelleştirmek için komutunu başka bağımsız değişken veya parametre olmadan tek başına kullanın Update-Package .

Önemli

Komutun aşağıdaki biçimini dikkatli bir şekilde kullandığınızdan emin olun. Komut işleminin tüm güncelleştirmeleri gerçekleştirmesi çok zaman alabilir.

# Update all packages in all projects in the solution
Update-Package 

Paket yeniden yüklemeyle ilgili dikkat edilmesi gerekenler

Paketleri yeniden yüklemek için komutunu kullanmayı Update-Package planlıyorsanız yapılandırma senaryonuzla uyumluluğu sağlamak için aşağıdaki noktaları gözden geçirin.

  • Paketler ve bağımlılıkları yeniden hedeflenen bir proje hedef çerçevesini desteklemeyebilir.
  • requireReinstallation özniteliği olarak ayarlandığındatrue, Visual Studio etkilenen paketler için derleme uyarıları oluşturur.
  • Paket ve sürüm kısıtlamalarının yeniden yüklenmesi bağımlılık sürümü uyumluluk sorunlarına neden olabilir.
  • Belirli bir paketin yeniden yüklenmesi bağımlı paketlerin bozulmasına neden olabilir.

Paket proje hedef çerçeveyi desteklemiyor

Proje hedef çerçevenizi yeniden hedeflerseniz, bir veya daha fazla paket yeni hedef yapılandırmayı desteklemeyebilir.

Genellikle, komutuyla Update-Package –reinstall <package_name> bir paketi yeniden yüklemek işe yarar. Eski bir hedef çerçeveye yüklenmiş bir paket kaldırılır ve aynı paket projenin yeni hedef çerçevesine yüklenir.

Bazı durumlarda, bir paket yeni hedef çerçeveyi desteklemeyebilir. Karşılaşabileceğiniz sorunlardan bazıları şunlardır:

  • Paket taşınabilir sınıf kitaplıklarını (PCL' ler) destekliyorsa ve projeyi paket tarafından artık desteklenmeyen platformların bir birleşimine yeniden hedeflediyseniz, yeniden yüklemeden sonra paket başvuruları eksik olabilir.

  • Bu sorun, doğrudan kullandığınız paketler veya bağımlılık olarak yüklenen paketler için ortaya çıkar. Doğrudan kullandığınız herhangi bir paket, bağımlılıkları desteklemezken yeni hedef çerçeveyi destekleyebileceğinden.

  • Uygulamanızı yeniden hedefledikten sonra paketleri yeniden yüklemek derleme veya çalışma zamanı hatalarıyla sonuçlanırsa, hedef çerçevenizi geri almanız veya yeni hedef çerçevenizi düzgün şekilde destekleyen alternatif paketleri aramanız gerekebilir.

requireReinstallation özniteliği true olarak ayarlandı

Proje hedef çerçevenizi yeniden hedefledikten veya NuGet paketlerini yükseltdikten sonra, NuGet projenizin dosyasına özniteliğini packages.config ekleyebilirrequireReinstallation. NuGet yeniden hedefleme veya yükseltme işlemi sırasında etkilenen paketleri algılarsa, etkilenen tüm paket başvuruları için dosyaya packages.config bir requireReinstallation="true" öznitelik ekler. Sonuç olarak, Visual Studio'daki projenizin sonraki her derlemesi bu paketler için derleme uyarıları oluşturur. Uyarılar, etkilenen paketi yeniden yüklemek için bir anımsatıcı olarak sunulur.

Paket bağımlılığı sürümü uyumsuzluğu

komutu, Update-Package –reinstall yüklü bir paketin aynı sürümünü ve tüm bağımlılıkların en son sürümünü yeniden yükler. Sürüm uyumsuzluğu sorunlarını gidermek için, yapılandırmayı denetlemek için sürüm aralığı kısıtlamaları ayarlayabilirsiniz. NuGet kısıtlamalara bağlı kalarak paket bağımlılıklarını yalnızca sorunu düzeltmek için gereken şekilde daha yeni sürümlere güncelleştirir.

  • Kısıtlama ayarlarınız paketi yeniden yükleme sırasında bağımlılığın önceki bir sürüme geri döndürülmesine neden oluyorsa, sorunu komutuyla Update-Package <dependency_name> çözebilirsiniz. Bu komut, bağımlı paketi etkilemeden belirtilen bağımlılığı yeniden yükler.

  • Komutunu da kullanabilirsiniz Update-Package –reinstall <packageName> -ignoreDependencies . Bu seçenek özgün paketin aynı sürümünü yeniden yükler, ancak bağımlılıkları yeniden yüklemez. Paket bağımlılıklarını güncelleştirmek yapılandırma durumunun bozulmasına neden olabilirken bu yaklaşımı kullanın.

Bozuk bağımlı paket

Belirli bir paketi yeniden yüklediğinizde, yeniden yüklenen pakete bağımlı olan yüklü paketler güncelleştirilmez. Bu diğer yüklü paketlerin sürümleri aynı kalır. Sonuç olarak, bağımlılığı yeniden yüklemek bağımlı bir paketi bozabilir.