Ad Alanları ve Montajlar arasında çok kafam karışıyor. Are System.Data
and System.Web
Namespace veya Assemblies?
Bunların ad alanları olarak adlandırıldığını ve aynı zamanda GAC_32
klasörde bulunduğunu fark ettim . Peki bunlar tam olarak nedir?
Ad Alanları ve Montajlar arasında çok kafam karışıyor. Are System.Data
and System.Web
Namespace veya Assemblies?
Bunların ad alanları olarak adlandırıldığını ve aynı zamanda GAC_32
klasörde bulunduğunu fark ettim . Peki bunlar tam olarak nedir?
Yanıtlar:
System.Data
bir ad alanıdır , System.Data.DLL
(dosya) bir derlemedir .
Bir ad alanı, türlerin mantıksal bir gruplamasıdır (çoğunlukla ad çakışmalarını önlemek için). Bir derleme, birden çok ad alanında türler içerebilir ( System.DLL
birkaç tane ... içerir) ve tek bir ad alanı derlemelere yayılabilir (örn. System.Threading
).
namespace
derlemenizi oluşturmak için derlenen kaynak kodunda C # ifadesini (veya başka bir .NET dilindeki eşdeğerini) kullanarak. İkinci bir derlemenin bir ad alanını yeniden açmasının ve içine daha fazla sınıf eklemesinin mümkün olduğunu unutmayın.
Ad alanı , sınıfların mantıksal bir gruplamasıdır ve aynı işlevselliğe aittir. YaniSystem.Web
veSystem.Data
ad alanları vardır
MSDN bunu şu şekilde tanımlar:
Ad alanları C # programlamasında iki şekilde yoğun şekilde kullanılır. İlk olarak, .NET Framework birçok sınıfını düzenlemek için ad alanlarını kullanır İkinci olarak, kendi ad alanlarınızı bildirmek, daha büyük programlama projelerinde sınıf ve yöntem adlarının kapsamını kontrol etmeye yardımcı olabilir.
Derleme , .NET çalışma zamanı ortamı tarafından yürütülebilen (önceden derlenmiş) kod yığınıdır. Bir veya daha fazla Ad Alanı içerir. Bir .NET programı, bir veya daha fazla derlemeden oluşur.
System.Web.dll
ve System.Data.dll
meclislerdir.
MSDN bunu şu şekilde tanımlar:
Derlemeler, .NET Framework uygulamalarının yapı taşlarıdır; dağıtım, sürüm kontrolü, yeniden kullanım, etkinleştirme kapsamı ve güvenlik izinlerinin temel birimini oluştururlar. Derleme, birlikte çalışmak ve mantıksal bir işlevsellik birimi oluşturmak için oluşturulmuş türler ve kaynaklar koleksiyonudur. Bir derleme, ortak dil çalışma zamanına tür uygulamalarının farkında olması için gereken bilgileri sağlar. Çalışma zamanı için, bir montaj bağlamının dışında bir tür mevcut değildir.
Kısacası:
Montaj:
Bir montaj, fiziksel kod gruplamanın temel bir birimini sağlar ve bir Çıkış Birimidir. Bir Dağıtım birimi ve bir sürüm oluşturma birimidir. Derlemeler MSIL kodunu içerir.
Ad alanı:
Bir ad alanı, mantıksal kod gruplamasının temel bir birimini sağlar.Her adın Benzersiz olduğu adların bir koleksiyonudur. Sınıflar Grubu için mantıksal sınır oluştururlar. Ad alanı Proje Özellikleri'nde belirtilmelidir.
Kısacası:
İpuçları.
Bir derleme, bir tür koleksiyonu içerir (örneğin, l'assembly System, System, System.IO, ecc dahil birçok ad alanı içerir). Genellikle, derlemenin adı her zaman değil, ancak içerdiği bir ad alanıyla aynıdır.
Diğer derleme ve ad alanları örnekleri.
Derleme 1 ( CoreAssembly.DLL )
Ad alanları içerir Namespace1.subnamespace1
Derleme 2 ( ExtensionCoreAssembly.DLL )
Ad alanları içerir Namespace1.subnamespace1
Bu teknikle, farklı ad alanlarını içeren ve var olan bir montajı başka bir montajla genişleten derleme adını kullanmak mümkündür.
TANIMLAR.
Meclisler
Derleme, mantıksal bir işlevsellik birimi oluşturan türler ve kaynaklar koleksiyonudur. .NET Framework'teki tüm türler derlemelerde bulunmalıdır; ortak dil çalışma zamanı, derlemeler dışındaki türleri desteklemez. Visual Basic .NET ile bir Microsoft Windows® Uygulaması, Windows Hizmeti, Sınıf Kitaplığı veya başka bir uygulama oluşturduğunuzda, tek bir derleme oluşturursunuz. Her derleme bir .exe veya .dll dosyası olarak saklanır. Not Birden çok dosyayı kapsayan montajlar oluşturmak teknik olarak mümkün olsa da, çoğu durumda bu teknolojiyi kullanma olasılığınız yoktur.
İsim alanları
Visual Basic .NET kodunuzu düzenlemenin başka bir yolu da ad alanlarının kullanılmasıdır. Ad alanları, derlemelerin yerine geçmez, ancak derlemeleri tamamlayan ikinci bir organizasyon yöntemidir. Ad alanları, tür adlarını gruplamanın ve ad çakışmaları olasılığını azaltmanın bir yoludur. Bir ad alanı hem diğer ad alanlarını hem de türleri içerebilir. Bir türün tam adı, o türü içeren ad alanlarının birleşimini içerir.
Bağlantı: http://msdn.microsoft.com/en-us/library/ms973231.aspx
Bunlar ad alanlarıdır. Assemblies birden fazla ad alanı içerir.Örneğin: System.dll
şu ad alanlarını (ve daha fazlasını) içerir:
Ayrıca bir ad alanı iç içe geçmiş ad alanları içerebilir.Bunlar sadece kodu organize etmek için mantıksal adlardır. Unutmayın, DLL
dosyalar ad alanlarını içeren derlemelerdir.
GAC
olduğu genel birleştirme önbelleği . MSDN'ye göre :
Genel derleme önbelleği, bilgisayardaki çeşitli uygulamalar tarafından paylaşılmak üzere özel olarak belirlenmiş derlemeleri depolar.
Yani yaygın saklanan meclisleri kullanılan GAC
ve bu nedenle size saklanan projesiz takımlarından başvuran olduğu proje dizinine tüm montaj dosyaları kopyalamak gerekmez GAC
olan Güçlü-Named bir başvuru eklediğinizde assemblies.Normally Dosyanızın Strong-Named
bir kopyası olmayan projenizden derleme, .dll
klasörünüzde oluşturulacaktır bin\Debug
... Dilerseniz derlemenizi yapabilirsiniz (örneğin, sınıf kitaplığı projesi) Kesin Adlandırılmış.Bkz: Nasıl Yapılır: Güçlü İsim
Diğerleri bu soruya çok iyi ve ayrıntılı cevaplar verdiler. Ancak emin olmadığınızda MSDN'ye bakabileceğinizi belirtmek isterim. MSDN kitaplığı, herhangi bir türün bulunduğu ad alanını ve derlemeyi çok açık ve basit bir şekilde açıklar . Hatta dosyanın adını söylüyor, (in System.Data.dll)
bu yüzden belirsizlik yok.
@Amdluigi'nin dediği gibi, "Genellikle, assembly adı her zaman değil ama içerdiği bir ad alanıyla aynıdır".
Studio'daki Nesne Tarayıcısında System.Data.dll'nin bir ekran görüntüsü var. Buradaki sorunları keşfetmek için mükemmel bir örnek. Derlemede bulunan ad alanlarının çoğunun System.Data veya System.Data alt ad alanı olduğuna dikkat edin.
Genel olarak, derleme adlarının içlerindeki ad alanlarıyla ilişkilendirilmesi iyi bir uygulamadır. Studio bir montaj oluşturmak için ilk kez bir proje oluşturduğunda, proje özelliklerinden birinin varsayılan ad alanı olduğuna dikkat edin. Başlangıçta Studio, varsayılan ad alanına projenin kendisiyle aynı adı verir. Bir projeyi yeniden adlandırmayı seçerseniz, varsayılan ad alanını da değiştirmeyi düşünün.
Ekstra iki ad alanı vardır: Microsoft.SqlServer anlaşılabilir. Ayrı bir derlemede paketlemek istemedikleri bazı SQL Server türleri.
Ama System.Xml'de ne var ???? System.Xml.dll derlemesi vardır. Bu ad alanı neden System.Data.dll'de de görünüyor?
Bir derlemenin bir ad alanını yeniden açabileceğine ve ona daha fazlasını ekleyebileceğine dikkat edin - System.Data.dll'nin System.Xml ad alanıyla yaptığı tam olarak budur.
Bunun nedeni, ad alanlarının sıfır performans etkisine sahip olması, ancak derlemelerin çok fazla olmasıdır. Önemli miktarda koda sahip 1000 sınıfınız varsa, çok büyük bir bellek ayak izine sahip tek bir derleme istemezsiniz. Her biri bir sınıfa sahip 1000 montaj da istemezsiniz. Herhangi bir derlemenin içeriği çalıştırılmadan önce belleğe yüklenmesi gerekir. Bir derlemenin makul sayıda birbiriyle ilişkili sınıf içermesini istiyorsunuz, bu nedenle uygulamanız sınıflarından birini elde etmek için bir derleme yüklediğinde, uygulamanın ihtiyaç duyacağı diğer sınıfları ücretsiz olarak alır. Granülarite önemlidir: ne çok büyük ne de çok küçük, tam olarak doğru.
System.Data.dll'nin System.Xml'yi yeniden açtığına ve tam olarak bir sınıf eklediğine dikkat edin: XmlDataDocument. Bu sınıf, ilişkisel verileri bir XML belgesi olarak yorumlamak için kullanılır. Uygulamanız sadece XML kullanıyorsa, bu sınıfa ihtiyacı olmayacaktır. Uygulamanız ilişkisel verilerle ilgileniyorsa, olabilir. Dolayısıyla, XmlDataDocument XmlDocument'ten miras alırken ve System.Xml ad alanında bulunurken, System.Data.dll derlemesinde paketlenir.
Tüm bunlar, yalnızca tek bir kavramın, paketin olduğu Java ile ilgili bir geçmişiniz varsa özellikle önemlidir. .NET'te iki tane derleme ve ad alanı vardır. İkisi ortogonaldir. Bir derleme açıkça birden fazla ad alanı içerebilir. Bir derleme bir ad alanını yeniden açabilir ve ona daha fazlasını ekleyebilir - başka bir deyişle, bir ad alanındaki türler birden fazla derlemeyi kapsayabilir.