packages.config PackageReference'a geçiş

Visual Studio 2017 Sürüm 15.7 ve sonraki sürümler, projeyi packages.config yönetim biçiminden PackageReference biçimine dönüştürmeyi destekler.

PackageReference kullanmanın avantajları

  • Tüm proje bağımlılıklarınıtek bir yerde yönetme: Projeden projeye başvurular ve derleme başvuruları gibi, NuGet paket başvuruları da (düğüm kullanılarak) ayrı bir packages.config dosyası yerine doğrudan proje dosyaları içinde yönetilir.
  • Üst düzey bağımlılıklarınaçık olmayan görünümü: PackageReference, packages.config yalnızca projeye doğrudan NuGet paketleri listeler. Sonuç olarak, NuGet Paket Yöneticisi kullanıcı arabirimi ve proje dosyası alt düzey bağımlılıklarla karmaşık hale gelir.
  • Performans geliştirmeleri:PackageReference kullanılırken paketler genel paketler klasöründe (çözüm içindeki bir klasör yerine genel paketleri ve önbellek klasörlerini yönetme konusunda açıklandığı gibi) korunur. Sonuç olarak PackageReference daha hızlı çalışır ve daha az disk alanı tüketir.
  • Bağımlılıklar ve içerikakışı üzerinde ince denetim: MSBuild'ın mevcut özelliklerini kullanarak NuGet paketine koşullu olarak başvurup hedef çerçeve, yapılandırma, platform veya diğer özetler için paket başvurularını seçebilirsiniz.

Sınırlamalar

  • NuGet PackageReference, 2015 ve Visual Studio kullanılamaz. Geçirilen projeler yalnızca 2017 ve Visual Studio açılabilir.
  • Geçiş şu anda C++ ve ASP.NET kullanılamıyor.
  • Bazı paketler PackageReference ile tam olarak uyumlu olabilir. Daha fazla bilgi için bkz. paket uyumluluğu sorunları.

Buna ek olarak, PackageReferences'ın çalışma ve diğer packages.config. Örneğin, yükseltme sürümlerini sınırlama PackageReference tarafından desteklanmaz, ancak Kayan Sürümler için destek ekleyin.

Bilinen Sorunlar

  1. Seçeneği Migrate packages.config to PackageReference... sağ tıklama bağlam menüsünde kullanılamaz

Sorun

Bir proje ilk kez açıldığında NuGet işlemi gerçekleştirilinceye kadar NuGet başlatılmış olabilir. Bu, geçiş seçeneğinin veya üzerinde sağ tıklama bağlam menüsünde packages.config göstermeyebilirsiniz. References

Geçici çözüm

Aşağıdaki eylemlerden herhangi birini NuGet gerçekleştirin:

  • Kullanıcı arabirimini Paket Yöneticisi - Sağ tıklayın References ve seçinManage NuGet Packages...
  • Konsol - Paket Yöneticisi'yi Tools > NuGet Package Manager açın, öğesini seçinPackage Manager Console
  • Geri NuGet çalıştır - Kümedeki çözüm düğümüne sağ tıklayın Çözüm Gezgini seçinRestore NuGet Packages
  • Geri yükleme işlemi tetikleyen projeyi NuGet oluşturma

Artık geçiş seçeneğini görüyor olmak gerekir. Bu seçeneğin destek olmadığını ve C++ proje türleri için ASP.NET olmadığını unutmayın.

Geçiş adımları

Not

Geçiş başlamadan önce Visual Studio projenin bir yedeğini oluşturur ve gerekirse geri packages.configolanak sağlar.

  1. kullanarak proje içeren bir çözüm packages.config açın.

  2. Bu Çözüm Gezgini,Başvurular düğümüne veya dosyasına sağ tıklayın ve PackageReference... packages.config Geçir'i seçin.

  3. Geçişçi, projenin NuGet paketi başvurularını analiz eder ve bunları Üst düzey bağımlılıklar (doğrudan yüklemiş olduğu NuGet paketleri) ve Geçişli bağımlılıklar (üst düzey paketlerin bağımlılıkları olarak yüklenmiş paketler) olarak kategorilere ayırmaya çalışır.

    Not

    PackageReference geçişli paket geri yüklemesini destekler ve bağımlılıkları dinamik olarak çözer, yani geçişli bağımlılıkların açıkça yüklenmemiş olması gerekir.

  4. (İsteğe bağlı) Geçişli bağımlılık olarak NuGet üst düzey bağımlılık olarak sınıflandırılan bir pakete üst düzey bağımlılık olarak davranmayı seçebilirsiniz. Bu seçenek, geçişli olarak (, , veya klasörlerdekiler) ve geliştirme bağımlılığı () olarak işaretlenen varlıklar içeren paketler için otomatik buildbuildCrossTargeting olarak contentFilesanalyzersdevelopmentDependency = "true" ayarlanır.

  5. Tüm paket uyumluluk sorunlarını gözden geçirin.

  6. Geçişi başlamak için Tamam'ı seçin.

  7. Geçişin sonunda Visual Studio, yedekleme yolu, yüklü paketlerin (üst düzey bağımlılıklar), geçişli bağımlılıklar olarak başvurulan paketlerin listesini ve geçişin başında tanımlanan uyumluluk sorunlarının listesini içeren bir rapor sağlar. Rapor yedekleme klasörüne kaydedilir.

  8. Çözümün derleme ve çalıştırmalarını doğrulama. Sorunlarla karşılaşırsanız, üzerinde bir sorun GitHub.

packages.config'a geri alma

  1. Geçirilen projeyi kapatın.

  2. Proje dosyasını ve packages.config yedeklemeden (genellikle <solution_root>\MigrationBackup\<unique_guid>\<project_name>\ ) proje klasörüne kopyalayın. Proje kök dizininde mevcutsa obj klasörünü silin.

  3. Projeyi açın.

  4. Araçlar Paket Yöneticisi Konsol menü komutunu kullanarak NuGet Paket Yöneticisi Paket Yöneticisi > Konsolu'nu açın.

  5. Konsolda aşağıdaki komutu çalıştırın:

    update-package -reinstall
    

Geçiş sonrasında paket oluşturma

Geçiş tamamlandıktan sonra nuget.build.tasks.pack nuget paketine bir başvuru eklemenizi ve ardından paketi oluşturmak için msbuild -t:pack'i kullanmanızı öneririz. Bazı senaryolarda yerine dotnet.exe pack kullanabilirsiniz msbuild -t:pack ancak bu önerilmez.

Paket uyumluluk sorunları

PackageReference'ta packages.config bazı yönler desteklenmiyor. Bu tür sorunları, bu tür sorunları analiz eder ve algılar. Aşağıdaki sorunlardan biri veya daha fazlası olan herhangi bir paket, geçiş sonrasında beklendiği gibi davranmayabilirsiniz.

Paket install.ps1 yüklendikten sonra "install.ps1" betikleri yoksayılır

  • Açıklama:PackageReference ile install.ps1 ve uninstall.ps1 PowerShell betikleri paket yükleme veya kaldırma sırasında yürütülmez.

  • Olası etki:Hedef projede bazı davranışları yapılandırmak için bu betiklere bağımlı paketler beklendiği gibi çalışmayabilirsiniz.

Geçiş sonrasında paket yüklenirken "içerik" varlıkları kullanılamaz

  • Açıklama:Bir paketin klasöründeki varlıklar PackageReference ile birlikte desteklanmaz ve yoksayılır. PackageReference, daha iyi contentFiles geçişli destek ve paylaşılan içeriğe sahip olmak için desteği ekler.

  • Olası etki:'deki varlıklar projeye kopyalanmaz ve bu varlıkların varlığına bağlı olan proje kodu yeniden düzenleme gerektirir.

Yükseltmeden sonra paket yüklenirken XDT dönüştürmeleri uygulanmaz

  • Açıklama:XDT dönüşümleri PackageReference ile birlikte desteklanmaz ve bir paketi yüklerken veya kaldırırken dosyalar yoksayılır.

  • Olası etki:XDT dönüştürmeleri en yaygın olarak ve proje XML dosyalarına uygulanmaz. Bu da paket yükleniyor veya kaldırılana kadar projenin dosyasının web.config.uninstall.xdt web.config güncelleştirilmez.

Paket geçişten sonra yüklenirken lib kökünde derlemeler yoksayılır

  • Açıklama:PackageReference ile, hedef çerçeveye özgü alt klasörü olmayan klasörün kökünde mevcut derlemeler yoksayılır. NuGet, projenin hedef çerçevesine karşılık gelen hedef çerçeve bilinen adı (TFM) ile eşleşen bir alt klasöre bakarak eşleşen derlemeleri projeye yüklür.

  • Olası etki:Projenin hedef çerçevesine karşılık gelen hedef çerçeve bilinen adı (TFM) ile eşleşen bir alt klasöre sahip olmayan paketler, geçiş sırasında geçiş veya başarısız yüklemeden sonra beklendiği gibi davranmayabilirsiniz.

Bir sorun mu bulundu? Raporla!

Geçiş deneyimiyle ilgili bir sorunla karşınız varsa lütfen NuGet GitHub kaydedin.