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
- 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
Referencesve seçinManage NuGet Packages... - Konsol - Paket Yöneticisi'yi
Tools > NuGet Package Manageraçı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çin
Restore 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.
kullanarak proje içeren bir çözüm
packages.configaçın.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.
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.
(İ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
buildbuildCrossTargetingolarakcontentFilesanalyzersdevelopmentDependency = "true"ayarlanır.Tüm paket uyumluluk sorunlarını gözden geçirin.
Geçişi başlamak için Tamam'ı seçin.
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.
Çö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
Geçirilen projeyi kapatın.
Proje dosyasını ve
packages.configyedeklemeden (genellikle<solution_root>\MigrationBackup\<unique_guid>\<project_name>\) proje klasörüne kopyalayın. Proje kök dizininde mevcutsa obj klasörünü silin.Projeyi açın.
Araçlar Paket Yöneticisi Konsol menü komutunu kullanarak NuGet Paket Yöneticisi Paket Yöneticisi > Konsolu'nu açın.
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
contentFilesgeç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.xdtweb.configgü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.