.Nuget klasörü sürüm kontrolüne eklenmeli mi?


107

NuGet'in daha yeni sürümleriyle, bir projeyi NuGet paketlerini otomatik olarak geri yükleyecek şekilde yapılandırmak mümkündür, böylece packagesklasörün kaynak kodu havuzuna dahil edilmesi gerekmez. İyi.

Ancak, bu komut yeni bir .nugetklasör ekler ve orada bir ikili dosya vardır, NuGet.exe. Bu ayrıca Visual Studio tarafından otomatik olarak yeniden oluşturulabilir ve bu nedenle bunu sürüm kontrolüne eklemek doğru hissettirmez. Ancak, bu klasör olmadan Visual Studio çözümü düzgün bir şekilde yüklemeyecektir.

Sizler bununla nasıl başa çıkıyorsunuz? .Nuget kaynak denetimine eklensin mi? Çözümü açmadan önce komut satırı komut dosyası çalıştırılsın mı?


Bu en gerçek bağlantıdır docs.nuget.org/docs/workflows/… ve eski bir iş parçacığı olduğu için. Sadece
yorumdaki

Yanıtlar:


47

Bu gönderi eski, artık çözüm düzeyinde NuGet paketi geri yüklemesini kullanmamalısınız. 2.7+ sürümünden itibaren, NuGet kurulumunda paketleri derlemede otomatik olarak geri yüklemek için bir seçenek vardır. Böylece .nuget klasörü silinebilir ve seçenek projelerinizden kaldırılabilir.

http://docs.nuget.org/docs/reference/package-restore

GÜNCELLEME: NuGet 4.x ve. . Yukarıdaki bağlantı da bundan bahsediyor PackageReference, ancak aşağıdaki duyuru bunu daha iyi detaylandırıyor:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

Ve ironik bir şekilde o kadar kullanışlı olmayan NuGet 4.x RTM duyurusu:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

GÜNCELLEME 2: Görünüşe göre VS2017 ile paket referanslarını klasik csproj projeleriyle bile kullanabilirsiniz, ancak artık geriye dönük olarak uyumlu değiller ve paket alt bağımlılıklarını geri yüklemede bazı sorunlar yaşandı. Eminim hepsi çözülecektir.



@CAD Bloke, evet bu en alttaki okuma listesinde, onu daralttığın için teşekkürler.
Jeremy

Kullanarak VS'de Nuget'i kolayca güncelleyebilirsiniz Tools > Extensions & Updates > Updates.
jocull

47

@Richard Szalay'ın cevabı doğru - nuget.exe'yi işlemenize gerek yok. Bazı nedenlerden dolayı Visual Studio nuget.exe dosyasını otomatik olarak indirmezse, dosyada aşağıdaki ayarın true olarak yapıldığından emin olun nuget.targets:

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

VS çözümünü kapatın, yeniden açın ve oluşturun. Visual Studio, nuget.exe dosyasını şimdi otomatik olarak indirmelidir.


Bu arada, neden truevarsayılan olarak ayarlanmadığını bilen var mı?
ajukraine

2
Daha çok bir gizlilik meselesi. "İnternet üzerinden talepte bulunmanın basit eylemi, kullanıcı hakkındaki bilgileri açığa çıkarabilir (örneğin, kullanıcının IP adresinden, konumunu tahmin edebiliriz)." Bkz Paketi Geri Yükleme ve Nuget de onayı makale blog
Gan

1
Bilginize: NuGet.exe, .nuget klasöründe bulunmadığında, Çözümün içerik menüsünde NuGet Paket Geri Yükleme zaten yapılandırılmış olsa bile "NuGet Paketi Geri Yüklemeyi Etkinleştir" gösterilecektir. Bir inşaattan sonra seçenek ortadan kalkacaktır.
comecme

Bu kabul edilen cevap, IMO olmalı ... NuGet.exe çok küçük olsaydı, onu kaynak kontrolüne yapıştırabilir ve yok sayma dosyanızda yapmanız gereken her şeyi halledebilirim. Ama 1.5 megapiksel, her zaman Gan'ın yöntemiyle yapmam için yeterince büyük.
Brian MacKay

Nuget.exe formunu nereden indirir? Ya derleme sunucumun interneti yoksa?
bitbonk


20

Bağlanmak zorundasın .nuget\nuget.targets, ama değil nuget.exe. O yoksa sen değiştikçe hedefleri sürece, exe indirir DownloadNuGetExeiçin truenuget.targets içinde


4

Genellikle kaynak kontrolüne exe ekleme fikrinden hoşlanmasam da, kaynak kontrolünün projeyi açmak, inşa etmek ve yürütmek için gerekli olan her şeyi içermesi gerektiğini öneririm.

Bu durumda, .nuget klasörü gerekli bir bağımlılık gibi görünüyor. Bu nedenle kaynak kontrolü altında olması gerekir.

Araştırmanız gereken tek soru, bu klasör salt okunur olarak işaretlenirse NuGet'in nasıl tepki vereceği ve TFS'nin teslim edildikten sonra yapacağıdır.


Güncelleme: Daha önce NuGet'i hiç kullanmadığım için bu konuda biraz daha araştırma yaptım. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Muhtemelen yapmak istediğiniz şeyin NuGet'i her geliştiricinin iş istasyonuna yüklenmesi gereken bir gereksinim haline getirmek olduğunu öneririm.

Ayrıca, bir iş istasyonunu projeyi düzenlemeye başlamak için hazır hale getirmek için gereken toplu iş dosyasını kaynak kontrolüne yerleştirmelisiniz. Toplu iş dosyası, bağımlılık paketlerini almak ve kurmak için gerekli komutları çalıştıracaktır.

Bunun ötesinde, NuGet ile doğrudan iletişime geçip onlara bunun tam olarak nasıl çalışacağını sormak isteyebileceğinizi söyleyebilirim.


1
<RestorePackages>true</RestorePackages>* .Csproj dosyasında Visual Studio için yeterli bilgi olması gerektiğini düşündüm ama belki de değil.
Borek Bernard

1

NuGet artık paket geri yüklemeyi desteklediğine göre, ona daha yakından bakıyoruz.

Subversion'ı kaynak kontrolü için kullanıyoruz ve ilk düşüncelerim depomuza .nugeteklenmesi gereken, ancak svn: externals kullanılarak tek bir konuma işaret edecek şekilde eklenmesi gerektiğidir .

Bu şekilde, yeni sürümleri tüm geliştiricilere ve projelere otomatik olarak gönderebiliriz. HEAD yerine sürüm dallarındaki projeler için, nuget'i yalnız bırakmak istiyorsak svn: externals reference'nin revizyonunu belirleyebiliriz .

Çok fazla projemiz var, bu yüzden depoda nuget.exebirden fazla kopyalamamak anlamına da geliyor .


Harici proje paketlerini geri yüklemek için NuGet'i alamadım. Bu senin için çalıştı mı?
Doguhan Uluca

Evet, Powershell veya Uzantı Eklentisi sorunsuz çalışırken NuGet.exe yerel depomuzda (IIS 6 + SSL + AD kimlik doğrulaması) kimlik doğrulamasında sorun yaşıyor gibi görünse de.
si618

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.