Çözüm başına NuGet Paket Kaynağı ayarlarını yapmanın bir yolu var mı?


84

Visual Studio'nun tüm çözümlerde yerine çözüm başına NuGet paket kaynakları yapılandırmasını uygulamasını sağlamanın bir yolunu bilen var mı? Her birinin kendi özel NuGet havuzları olan birden çok proje üzerinde çalıştığım için sürüm oluşturma sorunları yaşıyorum. Hangi NuGet deposunun hangi projeye ait olduğunu hatırlamak ve geri dönmek ve doğru olanı doğru projeye uygulamak *** acısıdır.


Ne demek istediğinden emin değilim. Tüm çözümler için yalnızca nuget paketi kaynaklarını yapılandırabilirsiniz. Package.config dosyanız, projenizin ihtiyaç duyduğu nuget depolarının sürümlerini içerecektir. Otomatik olarak güncelleme. ne yapmak istediğine dair bir örnek verebilir misin?
Shyamal Desai

1
@Shyamal NuGet paket kaynaklarından bahsediyordum, paketlerin kendisinden değil ... Nasıl yapılacağını anladım.
BenAlabaster

Yanıtlar:


138

TLDR: Evet

NuGet, Windows Kullanıcı Profiliniz düzeyinde NuGet.config ile başlayan ve ardından çözümünüzü içeren dosya yolunun kökünden başlayarak daha fazla ve daha ayrıntılı yapılandırma uygulayarak paket kaynaklarının hiyerarşik bir uygulamasını kullanır ve son olarak çözüm dosyası.

İşte anlamayı başardığım şey - beni bu belgeye yönlendiren yardımsever bir Twitter kullanıcısı sayesinde:

https://docs.nuget.org/consume/nuget-config-file

NuGet paketi kaynaklarını Visual Studio'nun Tools > NuGet Package Manager > Package Manager Settings: Package Sourcesseçeneğinde düzenlediğinizde , bu değişiklikleri varsayılan olarak %APPDATA%\NuGetdizininizde bulunan NuGet.config dosyasına uygular . Bu ayarları çözüme göre (veya çözüm grubuna göre) geçersiz kılmak için, çözümünüzün veya çözümlerinizin yolu boyunca bir yere stratejik olarak yerleştirilmiş bir NuGet.config dosyası eklemeniz gerekir.

NuGet belgesini okursanız her şey netleşecek, aşağıda sağladığım çözüm, tek bir Visual Studio çözümü için bir yapılandırma belirtmenize hızlı bir şekilde izin verecektir:

  1. % APPDATA% \ NuGet'e gidin ve NuGet.config'in bir kopyasını alın
  2. Çözümünüzün kök dizinine, yani Application.sln'nin bulunduğu yere bir kopya atın.
  3. Kopyayı yalnızca bu çözümle ilgili NuGet paketi kaynaklarını içerecek şekilde düzenleyerek kullanıcı profilinize uygulanan varsayılanları geçersiz kılın - örneğin, bu çözüm için özel paketleri içeren ancak diğer projelere uygulanmaması gereken özel NuGet kaynağı - Örneğin:
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>

  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>

  <packageSources>

    <!-- Ditch all the Global NuGet package sources we only want a 
         single private NuGet repo for this project -->
    <clear />

    <!-- Add the private NuGet package source for this solution -->
    <add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" />

  </packageSources>

  <disabledPackageSources>

    <!-- Add any package sources to ignore here using the same keys as 
         defined in the packageSources list above-->

    <!--<add key="nuget.org" value="true" />-->

    <add key="Microsoft and .NET" value="true" />

  </disabledPackageSources>

</configuration>

Bir yapılandırma sağlanması, çoklu çözümlere başvurmak çözüm klasörleri tüm ortak dizin içinde bulunan sağlamak ve bu ortak dizinde bu çözümü hakkında paket kaynakları için NuGet.config koymak istiyorsanız o projeler için herhangi bir çözüm klasörleri değiller 't bu paket kaynakları bu ortak klasörde yer almayan kullanmak.


31
Teşekkürler BenAlabaster. Sadece basit tutmak istiyorsanız, şunları içeren bir dosyaya sahip olabilirsiniz:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Rubenisme

13
Bu değişikliklerin etkili olması için Visual Studio'yu kapatıp yeniden açmanız gerekebilir. Çözümümü kapatmayı denedim ve bu yeterli olmadı.
Jess

1
iyi cevap, örnek yapılandırma tam da gerekli olana indirgenirse daha iyi olurdu. Ayrıca VS2015 ile denedim ve @Jess'in yorumu artık geçerli görünmüyor, çözümü benim için yeni paket kaynağını aldı.
danio

6

BenAlabaster tarafından sağlanan mükemmel yanıta eklemek istiyorum . Ben de tam tersi bir sorun yaşadım:

Şirket, varsayılan olarak tüm çözümlerde kullanılmak üzere özel özel nuget beslemesini küresel olarak yapılandırdı ve genel nuget beslemesini kullanarak bir "prototip" uygulama yapmak istedim .

Bununla (bu çözümün dizininde), genel nuget feed'i yalnızca benim özel çözümüm için kullanılabilirken, şirketin beslemesini diğer tüm çözümler için varsayılan olarak tutuyor:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
    <!-- Make sure we use the public nuget -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <disabledPackageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
  </disabledPackageSources>
</configuration>

Anahtar, % APPDATA% \ NuGet içindeki NuGet.config dosyasındaki genel beslemeyi kasıtlı olarak devre dışı bıraktıklarından, yukarı doğru devre dışı bırakılan tüm akışları temizlemekti .

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.