Birden çok projeyle çözümler için NuGet


153

3 projeyle bir çözümüm olduğunu varsayalım:

  • çekirdek
  • UI
  • Testler

Kullandığım bazı NuGet paketleri 3 proje için de geçerli olacak. Bazıları sadece kullanıcı arayüzü ve Testler için, bazıları ise yalnızca Testler için (NUnit gibi) uygulanır.

NuGet kullanarak bunu ayarlamanın doğru yolu nedir ?

  1. Referansa ihtiyacım olduğunda her üç projede de "Kütüphane Paketi Referansı Ekle" yi kullanmalı mıyım?
  2. İlk kez bir pakete ihtiyacım olduğunda "Kütüphane Paketi Referansı Ekle" yi kullanmalı ve sonraki kullanımlar için Referans Ekle-> Gözat'ı kullanmalı mıyım?

Her iki durumda da kaç paket.config dosyasına sahip olmalıyım?

Yanıtlar:


239

Bunun üzerinde tökezleyen herkes için, şimdi aşağıdaki seçenek var:

Çözümünüzü sağ tıklayın> Çözüm için NuGet Paketlerini Yönetin ...

... Veya:

Araçlar> Kütüphane Paketi Yöneticisi> Çözüm için NuGet Paketlerini Yönetin ...

Yüklü paketler alanına giderseniz, çözümdeki her projede tek bir paketi 'Yönetebilirsiniz'.


5
Belirli bir sürüme sahip Çözüm için paket yüklemek istersem ne olur? Sihirbaz bana bu seçeneği vermiyor. Konsolda böyle çalıştırabilirim, Install-Package RazorEngine -Version 3.3.0ancak yalnızca konsol açılır menüsünde seçilen proje için uygulanacaktır.
MaciejLisCK

Bu Visual Studio 2010'da destekleniyor mu. Burada sadece bir soru sordum - stackoverflow.com/questions/33163987/…
user2645830

Ciddi derecede büyük bir projeniz varsa, bağımlılıkları güncellemek için bir paket yöneticisine gerçekten güvenir misiniz?
Mick

Belirli bir paket için "Yönet" düğmesi olmadığında bir fikriniz var mı? System.ServiceModel gibi, bu kitaplığı çözüm görünümünden yönetemiyorum.
Hoàng Long

@Mick, söz konusu iletişim kutusundaki Consolidate sekmesine göz atın ...

76

Birden fazla projeyi hedeflemek için konsolu kullanma

Tools > Library Package Manager > Package Manager Console

o zaman bu komutu kullan

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME

Örneğin

Get-Project Core,UI | Install-Package FluentDateTime

4
+1: En azından geçerli NuGet sürümünde, bu yöntemi hala "Çözüm için NuGet Paketlerini Yönet" iletişim kutusundan tercih ediyorum, çünkü çözümümüz gerçekten büyük ve proje diyaloglarının bir listesini bu diyaloga yapıştıramıyorum.
Yodan Tauber

21

Bu tatlı anlaşma benim için çalışıyor:

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}

2
İşte böyle yapılır! Örneğin, bir çözümde tüm projeleriniz için json.net'in tüm sürümlerini listelemek istiyorsanız şunu deneyin:Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -Filter Newtonsoft.Json}
jonypony3

1
@EdwardMMeshuris çok iyi bir komut ama paket adı ile tam olarak eşleşmeyecek. İşte tam maç için biraz güncellenmişGet-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }
Dark_Knight

12

Bir paketi birden çok çözüm üzerine kurmak istiyorsanız, bunu yapmak için kullanışlı bir Powershell betiği yazdım, buraya bakın .

Hatta Get-Project -Allkomutu filtreleyebilir ve proje listesinin bir alt kümesini hedefleyebilirsiniz.


8

Çözümünüzdeki her projedeki tüm harici kitaplığınız için "Kitaplık Paketi Referansı" nı kullanmalısınız. Her proje için bir Packages.config dosyası alacaksınız.

Ancak, paketi yalnızca bir kez indirir ve diğer tüm projeleriniz için yerel olarak yeniden kullanırsınız.


4
Not: Tüm kütüphane paketlerini güncellemezseniz, aynı montajın 3 farklı sürümü bulunur. .NET, GAC'de veya farklı adlarla 3 farklı sürümle çalışabilir. Ama aynı isme sahip olacaklarından. Eski sürüm yeni sürümün üzerine kopyalandığından, çalışmayan derlemelerle karşılaşırsınız.
graffic

2

Gelen Paket Yöneticisi Konsolundan aşağıdaki yazabilirsiniz komutu :

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION

Bu komutu yükleme veya güncelleme için de kullanabilirsiniz (Güncelleme Paketi)

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.