Bazı projeler birden fazla çözüme dahil edildiğinde, tüm çözümler için ortak bir nuget paketleri klasörü ayarlama


137

Çok uygun olan iç ve dış paket kaynaklarından paketleri almak için NuGet'i kullanıyorum. Ancak, paketlerin varsayılan olarak çözüm başına depolandığını fark ettim, bu da NuGet referanslarına sahip bazı projeler çeşitli çözümlere dahil edildiğinde çok sinir bozucu. Daha sonra referanslar, başka bir geliştirici veya yapı makinesi tarafından kullanılamayabilecek diğer çözümler paket klasörüne değiştirilir.

NuGet'in 2.1 sürümü ile ortak bir paket konumu (belki de proje kök düzeyinde, TFS kaynak kontrolü kullanıyoruz) işaret etmenin yolları olduğunu gördüm, sürüm notlarına bakın . NuGet v2.7 kullanıyorum

Ama bunun herhangi bir etkisi görmeden nuget.config dosyaları eklemeyi denedim. Paketler hala çözüm klasöründe saklanır. Kaçırdığım bir şey var mı? Kimin bu soruyu cevapladığına bağlı olarak, nuget.config dosyasına eklenecek xml düğümünün farklı yapıları var gibi görünüyor: Schwarzie başka bir Stackoverflow iş parçacığında öneriliyor :

<settings>
  <repositoryPath>..\..\[relative or absolute path]</repositoryPath>
</settings>

NuGet 2.1 sürüm notları (yukarıdaki bağlantıya bakın) şu biçimi önerir:

<configuration>
  <config>
    <add key="repositoryPath" value="..\..\[relative or absolute path]" />
  </config>
</configuration>

Bunlardan hangisinin ya da herhangi birinin ya da her ikisinin sonunda çalışacağını bilmiyorum. Her ikisini de çözüm düzeyinde denedim. Nuget.config dosyası TFS proje kök düzeyine yerleştirilebilir mi, yoksa çözüm dizininde mi olmalıdır? NuGet, bu dosyalardan ayarları belirli bir sırayla okur ve uygular, neden bunları çözüm düzeyinde bir nuget.config dosyasının TFS proje kök düzeyinde bir tanesini geçersiz kılacağı çeşitli düzeylerde eklemenin mantıklı olduğu anlaşılmaktadır. Bu netleştirilebilir mi?

Bu referansların çalışması için tüm kurulu paketleri kaldırmam gerekir mi? Birisi, çözüme özgü nuget kullanımından, birkaç çözüme ait projelerin gerekli nuget paketlerini bulabileceği ortak bir paket klasörüne geçmek için adım adım talimat verebilirse çok isterim.


3
Sorunuzun kısa cevabının (aşağıdaki Vermis cevabında gizlidir) $göreceli yolun önünde eksik olduğunuzu sanıyorum . Ayrıca, NuGet.Config dosyaları hakkındaki sorunuzun yanıtı burada . Bu .nuget ilk görünüyor, o zaman tüm üst dizinleri, sonra AppData içinde 'küresel' dosyasına: o zaman (ne olursa olsun TERS sırayla uygular olduğu anlamına gelir).
Benjol

Bu zor görünüyor. Paket adlı bu soruna çözüm olabilecek bir araç var: fsprojects.github.io/Paket
Tuomas Hietanen

Geç yorum. Sadece nuget.config dosyaları VS başlangıcında okunuyor gibi göründüğü için, bu değişikliği başlattığınızda çalıştırırsanız Visual Studio'nun yeniden başlatılması gerektiğini eklemek istedim. Ayrıca, $ olmadan hiçbir sorunum yoktu, sadece ters eğik çizgi ile başlamayın.
MBWise

Yanıtlar:


147

Birden fazla çözümde atıfta bulunulan projelerle harici ve dahili paket kaynaklarında benzer bir durum var. Ben sadece bugün kod üslerinden biri ile çalışma var ve geliştirici iş istasyonları ve yapı sunucumuz ile çalışıyor gibi görünüyor. Aşağıdaki işlemde bu senaryo göz önünde bulundurulmaktadır (ancak ortak paketler klasörüne başka bir yere sahip olmak için uyum sağlamak zor olmamalıdır).

  • Codebase
    • Proje A
    • Proje B
    • Proje C
    • Çözümler
      • Çözüm 1
      • Çözüm 2
      • Çözüm 3
      • Paketler (bu, tüm çözümlerin paylaştığı ortak pakettir)

NuGet 3.5.0.1484 sürümünden Visual Studio 2015 Güncelleştirme 3 ile güncelleştirilmiş yanıt

Bu süreç, bunu ilk başta ele aldığım zamandan biraz daha kolay ve bunu güncellemenin zamanının geldiğini düşündüm. Genel olarak, süreç sadece daha az adımla aynıdır. Sonuç, aşağıdakileri çözen veya sağlayan bir işlemdir:

  • Kaynak kodu kontrolü için yapılması gereken her şey çözümde görülebilir ve izlenir
  • Visual Studio'da Paket Yöneticisi'ni kullanarak yeni paketler yükleme veya paketleri güncelleme doğru havuz yolunu kullanır
  • İlk yapılandırmadan sonra, .csproj dosyalarının saldırıya uğraması gerekmez
  • Geliştirici iş istasyonunda değişiklik yok (Kod kullanıma hazır olarak hazırlandı)

Farkında olmak için bazı potansiyel dezavantajlar var (Henüz deneyimlemedim, YMMV). Bkz Benol en cevabını ve aşağıdaki yorumlar.

NuGet.Config Ekle

\ Solutions \ klasörünün kökünde bir NuGet.Config dosyası oluşturmak isteyeceksiniz. Bunun oluşturduğunuz UTF-8 kodlu bir dosya olduğundan emin olun, bunu nasıl yapacağınızdan emin değilseniz, Visual Studio'nun Dosya-> Yeni-> Dosya menüsünü kullanın ve ardından XML Dosyası şablonunu seçin. NuGet'e ekleyin.Aşağıdakileri yapılandırın:

<?xml version="1.0" encoding="utf-8"?>
<configuration>  
  <config>
    <add key="repositoryPath" value="$\..\Packages" />
  </config>
</configuration>

RepositoryPath ayarı için, $ belirtecini kullanarak mutlak bir yol veya göreceli yol (önerilen) belirleyebilirsiniz. $ Belirteci, NuGet.Config dosyasının bulunduğu yere dayanır ($ belirteci aslında NuGet.Config konumunun bir düzey altındadır ). Yani, \ Solutions \ NuGet.Config ve ben \ Solutions \ Packages varsa ben değer olarak $ \ .. \ Packages belirtmek gerekir.

Ardından, çözümünüze "NuGet" (Çözümünüze sağ tıklayın, Ekle-> Yeni Çözüm Klasörü) gibi bir çözüm olarak bir Çözüm Klasörü eklemek isteyeceksiniz. Çözüm Klasörleri, yalnızca Visual Studio çözümünde bulunan ve sürücüde gerçek bir klasör oluşturmayacak olan sanal klasörlerdir (ve her yerden dosyalara başvurabilirsiniz). "NuGet" çözüm klasörünüze sağ tıklayın ve ardından Ekle-> Mevcut Öğe'ye tıklayın ve \ Solutions \ NuGet.Config öğesini seçin.

Bunu yapmamızın nedeni, çözümde görünür olması ve kaynak kodu kontrolünüze uygun şekilde bağlı olduğundan emin olmanızda yardımcı olmasıdır. Kod tabanınızdaki paylaşılan projelerinize katılan her çözüm için bu adımı uygulamak isteyebilirsiniz.

NuGet.Config dosyasını .sln dosyalarının üzerindeki \ Solutions \ klasörüne yerleştirerek, NuGet'in klasör yapısını tekrar tekrar kullanacak bir NuGet.Config dosyası arayan "geçerli çalışma dizininden" yukarı doğru gezinmesi avantajından yararlanıyoruz. "Geçerli çalışma dizini" burada birkaç farklı şey anlamına gelir, biri NuGet.exe yürütme yolu ve diğeri .sln dosyasının konumu.

Paketler klasörünüzü değiştirme

İlk olarak, çözüm klasörlerinizin her birini gözden geçirmenizi ve var olan \ Packages \ klasörlerini silmenizi önemle tavsiye ederim (önce Visual Studio'yu kapatmanız gerekir). Bu, NuGet'in yeni yapılandırılmış \ Paketler \ klasörünüzü nereye yerleştirdiğini görmenizi kolaylaştırır ve yanlış \ Paketler \ klasörüne olan bağlantıların başarısız olmasını ve düzeltilmesini sağlar.

Çözümünüzü Visual Studio'da açın ve Tümünü Yeniden Oluştur'u başlatın. Alacağınız tüm derleme hatalarını yoksayın, bu noktada bu bekleniyor. Ancak bu, derleme işleminin başlangıcında NuGet paket geri yükleme özelliğini başlatmalıdır. \ Solutions \ Packages \ klasörünüzün istediğiniz yerde oluşturulduğunu doğrulayın. Yoksa, yapılandırmanızı gözden geçirin.

Şimdi, çözümünüzdeki her proje için şunları yapmak isteyeceksiniz:

  1. Projeye sağ tıklayın ve Projeyi Kaldır'ı seçin
  2. Projeye sağ tıklayın ve Düzenle-xxx.csproj dosyasını seçin
  3. \ Paketleri \ ile ilgili tüm referansları bulun ve yeni konuma güncelleyin.
    • Bunların çoğu <HintPath> referansları olacaktır, ancak hepsi değil. Örneğin, WebGrease ve Microsoft.Bcl.Build'in güncellenmesi gereken ayrı yol ayarları olacaktır.
  4. .Csproj dosyasını kaydedin ve ardından projeye sağ tıklayın ve Projeyi Yeniden Yükle'yi seçin.

Tüm .csproj dosyalarınız güncellendiğinde, başka bir Yeniden Oluştur'u başlatın ve eksik referanslarla ilgili artık hata oluşturmamalısınız. Bu noktada işiniz bitti ve şimdi NuGet'in paylaşılan Paketler klasörünü kullanacak şekilde yapılandırılması sağlandı.

VStudio 2012 ile NuGet 2.7.1 (2.7.40906.75) itibarıyla

Unutulmaması gereken ilk şey, nuget.config dosyasının nuget paket sistemindeki tüm yol ayarlarını kontrol etmemesidir. Bunu anlamak özellikle kafa karıştırıcıydı. Özellikle, sorun msbuild ve Visual Studio'nun (msbuild çağrısı) nuget.config dosyasında yolu kullanmaması, bunun yerine nuget.targets dosyasında geçersiz kılmalarıdır.

Çevre Hazırlığı

İlk olarak, çözümünüzün klasörünü gözden geçirir ve var olan tüm \ Packages \ klasörlerini kaldırırdım. Bu, tüm paketlerin görünür bir şekilde doğru klasöre yüklendiğinden emin olmanıza ve çözümlerinizdeki bozuk yol referanslarını keşfetmenize yardımcı olacaktır. Ardından, en son nuget Visual Studio uzantısının yüklü olduğundan emin olurum. Ayrıca her çözümde en son nuget.exe yüklü olduğundan emin olun. Bir komut istemi açın ve her $ (SolutionDir) \ .nuget \ klasörüne gidin ve aşağıdaki komutu yürütün:

nuget update -self

NuGet için ortak paket klasör yolunu ayarlama

Her bir $ (SolutionDir) \ .nuget \ NuGet.Config dosyasını açın ve <configuration> bölümünün içine aşağıdakileri ekleyin:

<config>
    <add key="repositorypath" value="$\..\..\..\Packages" />
</config>

Not: Mutlak bir yol veya göreceli bir yol kullanabilirsiniz. $İlegöreceli bir yol kullanıyorsanız, bununNuGet.Config konumunun bir düzey altında göreceli olduğunuunutmayın (bunun bir hata olduğuna inanıyoruz).

MSBuild ve Visual Studio için ortak paket klasör yolunu ayarlama

Her $ (SolutionDir) \ .nuget \ NuGet.targets dosyasını açın ve aşağıdaki bölümü değiştirin (Windows olmayanlar için altında başka bir bölüm olduğunu unutmayın):

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

Paketleri Güncelle

<PackagesDir>$([System.IO.Path]::GetFullPath("$(SolutionDir)\..\Packages"))</PackagesDir>

Not: GetFullPath, göreceli yolumuzu mutlak bir yola çözecektir.

Tüm nuget paketlerini ortak klasöre geri yükleme

Bir komut istemi açın ve her $ (SolutionDir) \ .nuget dosyasına gidin ve aşağıdaki komutu yürütün:

nuget restore ..\YourSolution.sln

Bu noktada, ortak konumunuzda tek bir \ paket \ klasörünüz bulunmalı ve çözüm klasörleriniz içinde hiçbiri bulunmamalıdır. Değilse, yollarınızı doğrulayın.

Proje referanslarını düzeltme

Her .csproj dosyasını bir metin düzenleyicide açın ve \ paketlerle ilgili başvuruları bulun ve doğru yola güncelleyin. Bunların çoğu <HintPath> referansları olacaktır, ancak hepsi değil. Örneğin, WebGrease ve Microsoft.Bcl.Build'in güncellenmesi gereken ayrı yol ayarları olacaktır.

Çözümünüzü oluşturun

Çözümünüzü Visual Studio'da açın ve bir yapıyı başlatın. Geri yüklenmesi gereken eksik paketlerden şikayet ederse, paketin eksik olduğunu ve geri yüklenmesi gerektiğini varsaymayın (hata yanıltıcı olabilir). .Csproj dosyalarınızdan birinde bozuk bir yol olabilir. Paketi geri yüklemeden önce bunu kontrol edin.

Eksik paketler hakkında derleme hatası var mı?

.Csproj dosyalarınızdaki yolların doğru olduğunu zaten doğruladıysanız, denemek için iki seçeneğiniz vardır. Bu, kodunuzu kaynak kodu kontrolünden güncellemenin sonucuysa, temiz bir kopyayı kontrol etmeyi ve ardından bunu oluşturmayı deneyebilirsiniz. Bu, geliştiricilerimizden biri için işe yaradı ve bence .suo dosyasında veya benzer bir şeyde bir eser var. Diğer seçenek, söz konusu çözümün .nuget klasöründeki komut satırını kullanarak bir paketi geri yüklemeyi zorlamaktır:

nuget restore ..\YourSolution.sln

Uzun sorunumun uzun cevabı için teşekkürler. Bu çözümü deneyeceğim ve size geri döneceğim.
Mats Isaksson

Her iki .sln dosyasının aynı dizinde bulunması işe yarar mı? aynı paketler dizinini paylaşırlar mı?
tofutim

7
Bence bu cevap nuget'in ne kadar katı olduğunu gösteriyor. Böylesine basit bir konsepte olanak sağlamak için böylesine karmaşık, katı bir yapı oluşturmak zorunda olmak: - "çözümler arasında aynı montajları paylaşmak" her şeyin kötü tasarımının bir göstergesidir.
Mick

1
HintPath'leri düzeltmek için ne işe yarar - NuGet.config dosyasını istediğiniz gibi güncelledikten sonra, Package-Manager konsolunda "Update-Package -reinstall" komutunu çalıştırın. Bu, tüm paketleri yeniden yükler, ipuçlarını da düzeltir. Bundan sonra - bazı kalıntılar kalmış olabilir (bazı gümüş ışık projelerinde vardı - hedef / yapıların "eski" ithalatı hala oradaydı)
johannes.colmsee

1
@Vermis Tüm çözümlerim için ortak nuget paketleri klasörü kurarsam. bunun Azure Devops yapım üzerindeki etkisi ne olacak?
Pankaj Devrani

39

Tüm projeler için ortak paket konumu ayarlamak yerine, projedeki HintPath'i aşağıdaki gibi değiştirmek de mümkündür:

<HintPath>$(SolutionDir)\packages\EntityFramework.6.1.0\lib\net40\EntityFramework.dll</HintPath>

Çoğu durumda paylaşılan projede sadece birkaç paket olacaktır, böylece kolayca değiştirebilirsiniz.

Bence daha iyi bir çözüm, kodu dalladığınızda, ortak repo ayarlarken, göreli yolu değiştirmeniz gerekir, bu çözümde bunu yapmanız gerekmez.


2
Adam haklı. Bu inanılmaz bir aptallık sorununa en basit çözümdür.
Lapsus

1
Mükemmel bir çözümdür. herhangi bir kodun yeniden yapılandırılmasını gerektirmeyen basit ve anlaşılır.
RredCat

2
AFAIK $ (SolutionDir) yalnızca derleme VS aracılığıyla yapıldığında ayarlanır. / P ayarınız olmadıkça, doğrudan msbuild.exe aracılığıyla bina yok: SolutionDir = path
Lars Nielsen

bu burada otomatik olarak ayarlanabilir% APPDATA% \ Roaming \ NuGet \ NuGet.Config
Korayem

15
Paketi güncelleyene ve HintPath'in üzerine yeni bir göreli yol yazana kadar bu harika çalışır. Bir çok paket ile geniş bir çözümde oldukça sıkıcı hale gelir. Tanrı bir Güncelleme Paketi çalıştırmanız gerektiğini yasakladı
Yeniden

22

NuGet (2.7) ve VS2012'nin en son sürümüyle bunu deneyimlerim:

  • .Nuget klasörünü silin (diskte ve çözümde)
  • Tüm çözümlerin ortak bir üst klasörüne bir NuGet.Config dosyası yerleştirin
  • Mevcut paketler klasörünü silme
  • Tüm csproj dosyalarını gözden geçirin ve yeni konumu işaret edecek şekilde HintPath'leri değiştirin
  • kâr

Benim durumumda, tüm paketleri koymak istedim .packages, bu yüzden NuGet.Config'im aşağıdaki gibi görünüyordu.

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <config>
     <add key="repositorypath" value=".packages" />
   </config>
 </configuration>

Olabilecek birkaç 'garip' şey olduğunu unutmayın, ancak katlanılabilir olduklarını düşünüyorum:

  • Bir paketi bir çözümden 'Güncelle' yaparsanız, eski sürümü derhal paketler klasörünüzden siler (oraya işaret eden başka bir çözümünüz olup olmadığını bilemez). Diğer çözüm gerektiğinde geri yükleneceğinden bu beni çok rahatsız etmiyor.
  • Çözümü sağ tıklatmakla paket eklemeye çalışırsanız, paket zaten başka bir çözümde varsa, orada olduğunu görür ve 'yükle' düğmesi yerine 'yeşil onay' gösterir. Genellikle projeye sağ tıklamayla yüklerim, bu yüzden bu beni hiç rahatsız etmiyor.

Feragatname : Bunu bugün denedim, destekleyecek uzun vadeli bir deneyimim yok!


4
Bu bunu yapmak için tavsiye edilen bir yol. Kabul edilen cevapta nuget geri yüklemesi yapmak için eski msbuild entegrasyon yolu bir pide ve NuGet.config dosyasını sln çalışmalarının yanına Otomatik Paket Geri Yükleme ile koyarak doğrulayabilirim. Ortak bir üst dizine koymak onaylayamıyorum.
9swampy

1
NuGet.Config'i tüm çözümler (TFS'de) için ortak ana klasöre nasıl koyabilirler? Bilmemin tek yolu nuget.config dosyasına sahip her çözümün altında .nuget klasörü; ve "repositorypath value = .packages" ise, .nuget altında aşağıdaki gibi bir alt klasör oluşturur: C: \ TFS \ Comp \ Ent \ SolABC \ .nuget \ .packages - bu, iç içe geçmiş projeleri / çözümleri temiz bir şekilde çözmez otomatik TFS derlemesi üzerinde de çalışmalıdır. Kabul edilen cevap, bazı elle kodlanmış çalışmalar ve ayrıca "depo yolu değeri = $ \ .. \ .. \ .. \ Paketleri, farklı göreli yollara sahip iç içe projeler varsa bu işe yaramaz.
hB0

2
Visual Studio 2015 ve Nuget 3.4.3 ile çalışır
Hüseyin Yağlı

Sadece eski paketi derhal silmeyecek, csproj dosyasına elle kodladığınız HintPath'in üzerine yazacak ve bozacaktır. @ hB0 doğru. Bu sadece nispeten basit çözümler için işe yarar. Şubeler, paylaşılan projeler vb. İle karmaşık bir TFS çalışma alanı yapısına girdikten sonra verimli bir şekilde ölçeklenemez.
gravidThoughts

20

VS 2013 ile NuGet sürüm 2.8.50926 var. Birden çok nuget.config dosyaları veya karmaşık dizin yapıları kullanmanız gerekmez. Burada bulunan varsayılan dosyayı değiştirmeniz yeterlidir:

%APPDATA%\Roaming\NuGet\NuGet.Config

İşte benim dosya içeriği:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Projects\nugetpackages" />
  </config>
  <activePackageSource>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </activePackageSource>
</configuration>

Böylece tüm paketler, çözüm nerede olursa olsun "C: \ Projects \ nugetpackages" klasörüne gider.

Tüm çözümlerinizde, mevcut "paketler" klasörlerini silin. Ardından çözümünüzü oluşturun, NuGet eksik paketleri otomatik olarak belirttiğiniz yeni, merkezi dizine geri yükleyecektir.


Bu şimdiye kadarki en kolay çözüm ve daha fazla sevgiyi hak ediyor!
Korayem

2
bu gerçekten de en kolay çözüm ama cevabınızda bir şey eksik. yine de her projenin csproj dosyalarında HintPath ile uğraşmanız gerekiyor. Otomatik olarak yeni yolu hedeflemeyeceklerdir. doğrumuyum?
batmaci

Aslında, bazı eski projelerimde bazen "eski" paketler klasörüne referanslar vardır. Ancak benim için her şey düzgün çalışıyor, bu yüzden sanırım küresel ortam öncelik kazanıyor.
Matthieu

OSX için bkz. docs.microsoft.com/en-us/nuget/consume-packages/… . Aşağıdaki mklink fikrini de seviyorum.
sgtz


3

Visual Studio 2013 Güncelleştirme 4 ve Nugget Paket Yöneticisi sürümü> 2.8.5'ten ...

Deponun kök dizininde nuget.config dosyası oluşturun.

dosya içeriği:

<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

Bu, tüm paketlerin nuget.config dosyanızın düzeyindeki paketler klasörüne gitmesine neden olur.

Şimdi 'update-package -reinstall' komutuyla her .sln nuget konsolu için gidebilirsiniz

Aynı seviyede birden fazla deponuz varsa ve aynı paket klasörünü paylaşacaklarınız varsa, bir klasör yukarı gitmeyi deneyin.

 <add key="repositoryPath" value="..\packages" />

Ama bu şekilde nuget paketleri referans csproj repositorys yolu dışında bir klasörü yukarı işaret neden olur.


3

Bir projedeki tüm NuGet referanslarını şeffaf bir şekilde $ (SolutionDir) ile ilişkili bir biçime dönüştüren bir NuGet paketini hazırladım. Oluşturma zamanı XSLT dönüşümü kullanarak bunu yapar, bu nedenle proje dosyanızı elle kesmek zorunda kalmazsınız. Paketlerinizi özgürce güncelleyebilirsiniz, hiçbir şey kırmaz.

https://www.nuget.org/packages/NugetRelativeRefs

Veya Visual Studio 2015 Güncelleştirme 3'ü kullanıyorsanız, paket referanslarınızı project.jsonburada açıklandığı şekilde forma geçirebilirsiniz : https://oren.codes/2016/02/08/project-json-all-the-things


Ne yazık ki, Microsoft project.json'dan uzaklaşıyor gibi görünüyor . Ayrıca, nuget paketini beğendim. Bir süre önce NuGetReferenceHintPathRewrite'ı kullandım, bu da hemen hemen aynı şeyi farklı bir şekilde yapıyor
Andrey Borisko

2

Nuget ile olan tecrübelerimi güncelleme 2.8.3. Nispeten basitti. Tüm bunlar sağ tıklama çözümünden paket geri yüklemesini etkinleştirdi . NuGet.Config düzenledi ve şu satırları ekledi:

  <config>
    <add key="repositorypath" value="..\Core\Packages" />
  </config>

Ardından çözümü yeniden oluşturdu, tüm paketleri istediğim klasöre indirdi ve referansları otomatik olarak güncelledi. Aynı şeyi sadece artımlı paketlerin indirildiği ve mevcut paketlere referans verilen diğer tüm projelerim için yaptım. Bu nedenle, ayarlandığı gibi tüm projeler için ortak bir paket deposu.

İşte paket geri yüklemeyi etkinleştirmek için adım adım bir prosedür.

http://blogs.4ward.it/enable-nuget-package-restore-in-visual-studio-and-tfs-2012-rc-to-building-windows-8-metro-apps/


2

İstediğiniz paylaşılan yere sadece sabit bağlantı / paketler. O zaman projeniz, özel bir paket konumu olmayan diğer kullanıcılar için kırılmaz.

Yönetici olarak bir komut istemi açın ve kullanın

mklink /prefix link_path Target_file/folder_path

2

Herhangi bir önemli çözüm için yukarıdaki cevaplar yetersiz kalacaktır. Oldukça basit, farklı göreli yollar, dallanma, paylaşılan projeler vb. İle karmaşık bir TFS çalışma alanı yapısı, tek bir merkezi havuzu imkansız hale getirir.

($ SolutionDir) kullanmak doğru yönde atılmış bir adımdır, ancak csproj dosyasını ($ SolutionDir) ile elle kodlamak, düzenli olarak güncellenen yüzlerce paket içeren bir kod tabanında oldukça sıkıcı olacaktır (her güncelleme gerçekleştiğinde, HintPath'in üzerine yazılır) yeni bir göreceli yol). Update-Package -Reinstall komutunu çalıştırmanız gerekirse ne olur?

NugetReferenceHintPathRewrite adında harika bir çözüm var . Derlemeden hemen önce (csproj dosyasını değiştirmeden) ($ SolutionDir) 'in HintPath'lere enjeksiyonunu otomatikleştirir. Otomatik inşa sistemlerine kolayca dahil edilebileceğini hayal ediyorum


1

Olanlar için kısa bir özeti profesyonel VS 2013 ile Nuget Version: 2.8.60318.667

Paketleri .nuget klasörüne göre bir yola şu şekilde yönlendirirsiniz:

<configuration>
  <config>
    <add key="repositoryPath" value="../Dependencies" />
  </config>
</configuration>

Örneğin, çözümünüz (.sln dosyası) C: \ Projects \ MySolution'da bulunuyorsa, NuGet paket geri yüklemesini etkinleştirdiğinizde .nuget klasörü şu şekilde oluşturulur: C: \ Projects \ MySolution.nuget ve paketler indirilir şöyle bir dizine kopyalayın: C: \ Projects \ MySolution \ Bağımlılıklar

NOT: Bazı (bilinmeyen) bir nedenle, "repositoryPath" dosyasını her güncelleştirdiğimde, değişikliklerin etkili olması için çözümü kapatıp yeniden açmam gerekiyor


Kapanış yapılandırma etiketinde eğik çizgi olduğuna dikkat edin.
Moo


0

paketini paket yöneticisi olarak kullananlar için bağımlılık dosyanız için bir otomatik symlink seçeneği vardır:

storage: symlink

btw: paket nuget kaldıraçlar

başvuru: https://fsprojects.github.io/Paket/dependencies-file.html

Mümkün olduğunca az değişiklik yapmak istiyorsanız, alt dizinleri düzenli aralıklarla bir komut dosyasıyla temizleyebilirsiniz. yani. Nuget'in varsayılan davranışı, dosyaları global bir konumdan bir yerel paketler klasörüne kopyalamaktır, bu nedenle daha sonra bu dosyaları silin.


0

NTFS kavşaklarını, tüm paket klasörlerini depo köklerinin üzerindeki tek bir klasöre doğrudan yapmak için kullanıyorum. Harika çalışıyor. Birden fazla çözümde paralel paket geri yüklemesinde sorun yok. Bunun bir avantajı, .csproj dosyalarınızdaki yüzlerce göreceli ipucu yolu gibi, kaynak kodunuzdaki hiçbir şeyi yeniden yapılandırmanız gerekmez. Dosya sisteminin tek bir paket klasörünün yeniden yönlendirilmesini ve simülasyonunu işlemesine izin vererek 'çalışır'.

Sadece 'git' konularına dikkat edin. Komut satırı üzerinden 'git status' işaretlenmemiş değişiklik göstermese de, GitKraken 'paket' kavşağını etiketsiz bir dosya olarak gördüğünü fark ettim . Tıkladığınızda 'dosya bir dizindir' gibi hataları bile gösterir. GitKraken, yeniden birleştirirseniz, kavşağı yok ederseniz ve orijinal dosya yoluna sahip metin içeren gerçek bir dosya olarak geri yüklerseniz bu 'dosyayı' saklamaya çalışır. Çok garip davranışlar. Belki .gitignore paket dosyaları eklendiğinden emin olabilirsiniz.


-1

NuGet 2.1'in talimatları şunlardır: http://docs.nuget.org/docs/release-notes/nuget-2.1

Çözüm düzeyindeki dosyaları düzenlemenize gerek yoktur.

Visual Studio 2013 ve üç çözüm paylaşım projesi ile çalışır.

Çözüm düzeyi NuGet'i (.nuget klasörlerindeki her bir nuget.exe) güncellemeyi unutmayın.

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.