Soru DLL kitaplıklarını depolamak ve başvurmak için en iyi uygulama?


Çoğu zaman, ekibimdeki bir geliştirici yeni bir Visual Studio projesi oluşturacak ve yerel makinelerinde bir yerde bir DLL'e başvuracaktır (ör. C: \ mydlls \ homersimpson \ test.dll). Daha sonra, kaynak kontrol deposundan projeyi aldığımda, projemi oluşturamam çünkü makinemde tam olarak aynı yerde başvurulan dll değerine sahip değilim.

Paylaşılan kütüphaneleri saklamak ve referanslamak için en iyi uygulama nedir?


21
2017-12-22 03:21


Menşei




Cevaplar:


Genellikle projemde bir dll dosyası yaratıyorum, burada referans dll'leri koyuyorum. Daha sonra lib klasöründeki referansı işaret ediyorum. Bu şekilde, her geliştirici kaynak kontrolünden sonra projeyi oluşturabilir.

Evde yapılmış bir proje ise, bu projeyi de çözümünüze ekleyebilirsiniz.


18
2017-12-22 03:37



Bu benim de ilk düşüncemdi. Gördüğüm tek dezavantajı, eğer yaygın olarak kullanılan bir DLL dosyanız varsa, onu referans gösteren her proje için birden fazla yerde kaynak kontrolünde olacağınızdır. - Rob Sobers
@ vg1890: dll'nin birden fazla kopyası bir avantaj olabilir, her projenin potansiyel olarak dll'nin farklı bir sürümünü kullanmasına izin verir - PaulG
GAC'ı sürüm oluşturma ile birlikte öneririm. Bu şekilde, önceden oluşturulmuş bir olayı kullanarak, bu DLL'yi paylaşım havuzundan GAC'ınıza yükleyebilirsiniz. - Saeed Neamati


Beklediğim en iyi uygulama SC deponuzun, başvurulan nesnelerin göreceli konumlarını sizin için içermesi ve zorlaması (genellikle paylaşılan bir yol aracılığıyla) olacaktır, bu nedenle doğrudan bu sorunla ilgilenmiyorsunuz demektir. Orijinal geliştirici bu bilgileri kontrol etmelidir.


4
2017-12-22 03:28



Nasıl olmaz? Tüm linkable modülleri SCC'ye dahil etmiyor musunuz? - dkretz
Sihirli klasörde +1 sihirli dll yok - Greg Dean
Doğru - "Doğrudan dll-cehenneme git. Gitme, ..." - dkretz


Montaj GAC'de değilse, bağımlılıklar olarak adlandırılan bir dizin oluşturun ve orada tüm montajları ekleyin. Klasör ve derlemeler kaynak kontrolüne eklenir. Kural, kaynak kontrolünde herhangi bir proje verildiğinde, inşa edilmesi gereken tek şey bir ödeme yapmak ve projeyi yapmak (veya projeye de kontrol edilen bir aracı çalıştırmaktır).

Çözüme bir klasör eklerseniz ve derlemeleri çözüm klasörüne eklerseniz, bu da dış bağımlılıkların var olduğunu gösteren devlere görsel bir işaret sağlar ... tüm bağımlılıklar bu dizinde bulunur. Göreli yollar, Visual Studio'nun referansları sorun olmadan tespit edebilmesini sağlar.

Büyük çözümler için, 20'den fazla projeyle, hayatı daha kolay hale getirir!


4
2017-12-22 03:34





Gerçek DLL'leri kaynak kontrolüne girerseniz, bunları göreceli bir yolla referans olarak kullanabilirsiniz ve tüm geliştiriciler projeyi bir sonraki güncellemede otomatik olarak herhangi bir bağımlılık alacaklardır.

Tam yolla bir DLL referansı eklemek, bir kaynak dosyasının tam yol tarafından eklenmesi bir hata olması gibi bir geliştirici hatası olabilir.


2
2017-12-22 03:38



İkili kodlarınızı kaynak kod sürüm kontrolünüzde kontrol ediyor musunuz? - grepsedawk
Hayır, kendi ikili olmayanlarım. Orijinal soru, proje ile inşa edilmemiş bir üçüncü parti DLL'den bahsettiğini varsaymıştım. - Greg Hewgill
Tamam bu daha mantıklı. Aynı şeyi üçüncü parti kütüphanelerle de yapıyoruz. - grepsedawk


Başparmak kuralı: Proje çözümün bir parçası değilse, çözüm, çözümünüzün kaynak denetim ağacının altında bulunan bir kaynak kontrollü / binshare veya / lib dizinindeki DLL'leri serbest bıraktı. Tüm dış bağımlılıklar, bu / binshare dizinine giren sürümlü DLL'lere sahip olmalıdır.

İş arkadaşınızın kolaylık açısından ne yaptığını anlıyorum. Bununla birlikte, bu geliştiricinin yaklaşımı, doğru konfigürasyon / yapı yönetimine taban tabana zıttır.

Örnek: MS Data Application Block uygulamasını uygulamanızda bağımlılık olarak kullanırsanız, MS'in dev kaynak gövdesinden en son almak yerine düzgün bir şekilde yayımlanmış bir binary'ye başvurmalısınız.


1
2017-12-22 04:49



İlk cümlenin İngilizce yazılmış mı? :) Belki bazı virgüller veya bağlaçlar bunu anlamama yardımcı olur mu? - Patrick Szalapski
:) Bunu temizlemek için bir virgül ekledim. Teşekkürler! - Daniel Auger


Bu yaklaşımın en iyi uygulamayı düşündüğümün tam tersi olduğunu düşünüyorum. Üçüncü parti ikili dosyalarını kaynak depodan uzak tutmak ve bunları oluşturma işleminizdeki bir Maven deposu gibi bir şeyle göndermenin çok daha iyi bir yaklaşım olacağını düşünüyorum. Kaynak deposunda dll'leri koymak, gereksiz yere deponun içeriğini şişirir ve gerektiğinde çok daha uzun süren projelerin elde edilmesine neden olur. Ayrıca, üçüncü taraf ikili sürümlerinin bağımsız yönetimini, sürümü ada göre değil, proje lib klasöründe depolanan belirli bir sürümün dll'sine başvurmak suretiyle ima edilmek suretiyle anlaşılmaz kılar.


0
2018-02-23 23:04





Neden özel bir NuGet beslemesi oluşturmuyorsunuz? Bu şekilde, yalnızca bir bağımlılığın kopyası (NuGet deposu) var ve birden fazla proje buna başvurabilir. Bağımlılığın birden çok sürümü bir arada bulunabilir ve gerekirse her bir proje farklı bir sürüme başvurabilir. Ayrıca, TFS Build paketleri oluşturma zamanında geri yükleyebilir.

VS Yapılandırması: https://www.visualstudio.com/en-us/docs/package/nuget/consume


0
2017-11-30 09:19