.NET Derlemeleri nedir?


195

.NET Derlemeleri nedir? İnternete göz attım ve tanımını anlayamıyorum.


11
C # Via CLR'yi okuyun . Sonuna kadar her şeyi öğreneceksin. Bu kitabı şiddetle tavsiye ediyorum.
David Neale 04

Yanıtlar:


171

Daha basit bir ifadeyle: .NET çalışma zamanı ortamı tarafından çalıştırılabilen bir yığın (önceden derlenmiş) kod. Bir .NET programı, bir veya daha fazla derlemeden oluşur.


31
@KimJongWoo - Hayır, bir Jar dosyası yalnızca derlenmiş bayt kodu dosyalarını içeren bir zip dosyasıdır. Derleme, bir PE (Taşınabilir Yürütülebilir format) Dosyasıdır (yani bir DLL veya EXE), ancak kavramsal olarak benzer amaçlara hizmet ederler.
Erik Funkenbusch

Yani .classJava dünyasındaki bir dosya gibi mi?
mljrg

245

Assembly, bir .net uygulamasının en küçük dağıtım birimidir. Bir dll veya exe olabilir .
Başlıca iki türü vardır:

  1. Özel Meclis: Yalnızca tek bir uygulamanın malı olan dll veya exe. Genellikle uygulama kök klasöründe saklanır

  2. Public / Shared assembly: Aynı anda birden fazla uygulama tarafından kullanılabilen bir dll'dir. Paylaşılan bir derleme GAC'de, yani Global Birleştirme Önbelleğinde saklanır .

Zor mu geliyor? Naa ....
GAC, bilgisayarınızda yüklü olan tüm yazılımların genel derlemelerini / dll'lerini bulabileceğiniz C: \ Windows \ Assembly klasörüdür.

Ayrıca üçüncü ve en az bilinen bir montaj türü vardır: Uydu Montajı .
Uydu Montajı, yalnızca uygulama tarafından gerekli görülen resimler ve diğer yürütülemez dosyalar gibi statik nesneleri içerir.

Umarım bu okuyuculara yardımcı olur!


3
Konumun .NET 4.0 için farklı olduğunu unutmayın: stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
TrueWill

bu yavaşlayabilir. bir klasör bunlardan bin tane aldıktan sonra, Windows dizin ağacında yürümeye veya dizini okumaya çalışırken yavaşlar.
Jim Michaels

@mangeshkt - Bir uygulamanın dll'sini kopyalayıp başka bir uygulamanın kök dizinine koymak mümkün mü, 1. uygulamanın işlevselliğini kullanabilecek miyim?
Shivam657

57

Meclisler

Bir uygulamayı derlediğinizde, oluşturulan MSIL kodu bir derlemede saklanır. Derlemeler, hem başka programlara ihtiyaç duymadan doğrudan Windows'tan çalıştırabileceğiniz yürütülebilir uygulama dosyalarını (bunlar bir .exe dosya uzantısına sahiptir) hem de diğer uygulamalar tarafından kullanılmak üzere kitaplıkları (.dll uzantılı) içerir.

MSIL'i içermenin yanı sıra, derlemeler ayrıca meta bilgileri (yani, meta veriler olarak da bilinen derlemede yer alan bilgilerle ilgili bilgiler) ve isteğe bağlı kaynakları (MSIL tarafından kullanılan ses dosyaları ve resimler gibi ek veriler) içerir. Meta bilgi, montajların tamamen kendi kendini tanımlayıcı olmasını sağlar. Bir derlemeyi kullanmak için başka bilgiye ihtiyacınız yoktur, yani gerekli verileri sistem kayıt defterine ekleyememek gibi durumlardan kaçınırsınız, bu, diğer platformlarla geliştirme yaparken genellikle bir sorundu.

Bu, uygulamaları dağıtmanın, dosyaları uzak bilgisayardaki bir dizine kopyalamak kadar basit olduğu anlamına gelir. Hedef sistemlerde ek bilgi gerekmediğinden, bu dizinden çalıştırılabilir bir dosya çalıştırabilirsiniz ve (.NET CLR'nin kurulu olduğu varsayılarak) gitmeye hazırsınız.

Elbette, bir uygulamayı tek bir yerde çalıştırmak için gereken her şeyi dahil etmek istemeyeceksiniz. Birden çok uygulamanın gerektirdiği görevleri yerine getiren bazı kodlar yazabilirsiniz. Bu gibi durumlarda, yeniden kullanılabilir kodu tüm uygulamaların erişebileceği bir yere yerleştirmek genellikle yararlıdır. .NET Framework'te bu, Genel Derleme Önbelleğidir (GAC). GAC'ye kod yerleştirmek basittir - kodu içeren derlemeyi bu önbelleği içeren dizine yerleştirmeniz yeterlidir.


Daha fazla netlik için "Bir uygulamayı derlediğinizde, oluşturulan MSIL kodu bir derlemede saklanır". Sadece bir montajın içeriğini görüntülemek için eklemek için ILSPY'yi kullanabilirsiniz.
Sandeep

33

Derleme, sabit sürücünüzde .NET Framework'teki sınıfların depolandığı gerçek .dll dosyasıdır. Örneğin, ASP.NET Framework içinde bulunan tüm sınıflar System.Web.dll adlı bir derlemede bulunur.

Daha doğrusu, bir derleme, .NET Framework'teki dağıtım, güvenlik ve sürüm kontrolünün birincil birimidir. Bir derleme birden çok dosyaya yayılabildiğinden, bir derleme genellikle "mantıksal" dll olarak adlandırılır.

Not

.NET Framework (sürüm 2.0) 51 derleme içerir.

İki tür derleme vardır: özel ve paylaşılan. Özel bir derleme yalnızca tek bir uygulama tarafından kullanılabilir. Öte yandan, paylaşılan bir derleme, aynı sunucuda bulunan tüm uygulamalar tarafından kullanılabilir.

Paylaşılan derlemeler, Genel Derleme Önbelleğinde (GAC) bulunur. Örneğin, System.Web.dll derlemesi ve .NET Framework'ün içerdiği diğer tüm derlemeler Genel Derleme Önbelleğinde bulunur.

Not

Global Assembly Cache fiziksel olarak bilgisayarınızın \ WINDOWS \ Assembly klasöründe bulunur. \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 klasörünüzde her derlemenin ayrı bir kopyası vardır. İlk montaj seti çalışma zamanında kullanılır ve ikinci set derleme zamanında kullanılır.

Uygulamanızda bir montajda bulunan bir sınıfı kullanmadan önce, montaja bir başvuru eklemeniz gerekir. Varsayılan olarak, bir ASP.NET uygulaması Genel Derleme Önbelleğinde bulunan en yaygın derlemelere başvurur:

mscorlib.dll

System.dll

System.Configuration.dll

System.Web.dll

System.Data.dll

System.Web.Services.dll

System.Xml.dll

System.Drawing.dll

System.EnterpriseServices.dll

System.Web.Mobile.dll

.NET Framework'te belirli bir sınıfı kullanmak için iki şey yapmanız gerekir. İlk olarak, uygulamanız sınıfı içeren derlemeye başvurmalıdır. İkinci olarak, uygulamanız sınıfla ilişkili ad alanını içe aktarmalıdır.

Çoğu durumda, en yaygın montajlara otomatik olarak referans verildiği için gerekli montaja referans verme konusunda endişelenmezsiniz. Ancak, özelleştirilmiş bir montaj kullanmanız gerekiyorsa, montaja açıkça bir referans eklemeniz gerekir. Örneğin, System.DirectoryServices ad alanındaki sınıfları kullanarak Active Directory ile etkileşim kurmanız gerekirse, uygulamanıza System.DirectoryServices.dll derlemesine bir başvuru eklemeniz gerekir.

.NET Framework SDK belgelerindeki her sınıf girdisi, sınıfla ilişkilendirilmiş derlemeyi ve ad alanını listeler. Örneğin, belgelerde MessageQueue sınıfına bakarsanız, bu sınıfın System.Messaging.dll derlemesinde bulunan System.Messaging ad alanında bulunduğunu keşfedersiniz.

Visual Web Developer kullanıyorsanız, Web Sitesi, Referans Ekle menü seçeneğini ve referans almanız gereken derlemenin adını seçerek bir derlemeye açıkça bir referans ekleyebilirsiniz. Örneğin, System.Messaging.dll derlemesine bir başvuru eklemek, uygulamanıza Liste 1.4'teki web yapılandırma dosyasının eklenmesiyle sonuçlanır.

Örneğin. Web.Config

enter code here

Visual Web Developer'ı kullanmamayı tercih ederseniz, yukarıdaki örnekteki dosyayı elle oluşturarak System.Messaging.dll derlemesine başvuruyu ekleyebilirsiniz.


1
Kabul edilen cevaptan çok daha teknik, bu kabul edilen cevap olmalıdır.
sparkyShorts

9

Wikipedia şunu söylemeli:

Microsoft .NET çerçevesinde bir derleme, dağıtım, sürüm oluşturma ve güvenlikte kullanım için kısmen derlenmiş bir kod kitaplığıdır. İki tür vardır: işlem derlemeleri (EXE) ve kitaplık derlemeleri (DLL). İşlem derlemesi, kitaplık derlemelerinde tanımlanan sınıfları kullanacak bir işlemi temsil eder. .NET derlemeleri, genellikle bir CLI dilinden üretilen ve daha sonra CLR tam zamanında derleyici tarafından çalışma zamanında makine diline derlenen CIL'deki kodu içerir. Bir montaj, bir veya daha fazla dosyadan oluşabilir. Kod dosyalarına modül adı verilir. Bir derleme, birden fazla kod modülü içerebilir ve kod modülleri oluşturmak için farklı diller kullanmak mümkün olduğundan, bir derleme oluşturmak için birkaç farklı dil kullanmak teknik olarak mümkündür.

Gerçekten göz attıysan, anlamadığın şeyi netleştirmen yardımcı olur.


8

Kabul edilen cevaba ek olarak size bir örnek vermek istiyorum !

Örneğin, hepimiz kullanırız

System.Console.WriteLine()

Ama System.Console.WriteLine kodu nerede !?
metni konsola yerleştiren kod hangisidir?

Console sınıfına ilişkin belgelerin ilk sayfasına bakarsanız, en üstte aşağıdakileri görürsünüz: Assembly: mscorlib (mscorlib.dll'de) Bu, Console sınıfı kodunun bir derlemede bulunduğunu gösterir. mscorlib adlı. Bir derleme birden çok dosyadan oluşabilir, ancak bu durumda, mscorlib.dll dinamik bağlantı kitaplığı olan tek bir dosyadır.

Mscorlib.dll dosyası .NET'te çok önemlidir, .NET'teki sınıf kitaplıkları için ana DLL dosyasıdır ve tüm temel .NET sınıflarını ve yapılarını içerir.

C veya C ++ 'yı biliyorsanız, genellikle üstte bir başlık dosyasına başvuran bir #include yönergesine ihtiyacınız vardır. Dahil etme dosyası, derleyiciye işlev prototipleri sağlar. tersine C # derleyicisinin başlık dosyalarına ihtiyacı yoktur. Derleme sırasında, C # derleyicisi mscorlib.dll dosyasına doğrudan erişir ve bu dosyadaki tüm sınıflar ve burada tanımlanan diğer türlerle ilgili meta verilerden bilgi alır.

C # derleyicisi, mscorlib.dll'nin aslında string türünde tek bir bağımsız değişken kabul eden WriteLine adlı bir yöntemle System adlı bir ad alanında Konsol adlı bir sınıf içerdiğini belirleyebilir.

C # derleyicisi, WriteLine çağrısının geçerli olduğunu belirleyebilir ve derleyici, yürütülebilir dosyadaki mscorlib derlemesine bir başvuru oluşturur.

varsayılan olarak C # derleyicisi mscorlib.dll'ye erişir, ancak diğer DLL'ler için derleyiciye sınıfların bulunduğu derlemeyi söylemeniz gerekir. Bunlar referans olarak bilinir .

Umarım artık anlaşılmıştır!

DotNetBook'tanZero Charles pitzold


7

Bkz bu :

Microsoft .NET çerçevesinde bir derleme, dağıtım, sürüm oluşturma ve güvenlikte kullanım için kısmen derlenmiş bir kod kitaplığıdır.


7

IL kodunda bulunan Sınıf, arayüz, numaralandırma vb. fiziksel koleksiyon. .Exe veya .DLL dosyası olabilir .EXE yürütülebilir dosyadır ve .DLL herhangi bir .net Desteklenen dilde dinamik olarak kullanılabilir.


6

Derleme, türlerden ve diğer kaynaklardan oluşan bir çalışma zamanı birimidir. Bir montajdaki tüm tipler aynı sürüm numarasına sahiptir.

Genellikle, bir derlemenin yalnızca bir ad alanı vardır ve bir program tarafından kullanılır. Ancak birkaç ad alanına yayılabilir. Ayrıca, bir ad alanı birkaç derlemeye yayılabilir. Büyük tasarımlarda, bir derleme, bir bildirge tarafından bir arada tutulan birden çok dosyadan oluşabilir (yani bir içindekiler tablosu).

C # 'da, bir derleme .Net uygulamasının en küçük dağıtımıdır. Dll veya exe olabilir. İki türü vardır: 1. Özel Derleme 2. Genel / Paylaşılan Derleme


6

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.

Kaynak : https://msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4

Benim gibi Java geçmişi olanlar için, aşağıdaki diyagramın kavramları açıklığa kavuşturacağını umuyoruz -

Derlemeler tıpkı jar dosyaları gibidir (birden çok .class dosyası içerir). Kodunuz mevcut bir assemblie'ye başvurabilir veya kodunuzun kendisi başka bir kodun referanslanması ve kullanılması için bir assemblie olarak yayınlanabilir (bunu Java'da proje bağımlılıklarınıza ekleyebileceğiniz jar dosyaları olarak düşünebilirsiniz).

Günün sonunda derleme, CLR'nin kurulu olduğu herhangi bir işletim sisteminde çalıştırılabilen derlenmiş bir koddur. Bu, .class dosyasının veya paketlenmiş jar dosyasının JVM yüklü herhangi bir makinede çalışabileceğini söylemekle aynıdır.

görüntü açıklamasını buraya girin


5

MSDN'nin iyi bir açıklaması var :

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.


2

.Net'te bir montaj şu şekilde olabilir:

Çeşitli koleksiyonu yönetilebilir parçalar içeren Types (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config Filesderlenmiş Privatelyveya Publicly; bir localveya Shared (GAC)klasöre konuşlandırılmış ; discover-ablebaşkaları tarafından programs/assembliesve; versiyon değiştirilebilir.


2

Birleştirme, Microsoft.Net'te kodun sürümleme güvenliği, dağıtımı ve yeniden kullanılabilirliğinin en küçük birimidir.

Bu içerir:

- Assembly Identity
- Manifest
- Metadata
- MSIL Code
- Security Information
- Assembly Header

1

Assembly, .NET Framework ile programlamanın temel parçasıdır. CLR'nin taşınabilir bir yürütülebilir dosyada MSIL (Microsoft Ara Dili) kodunu yürüttüğü kodu içerir, ilişkili bir derleme bildirimi yoksa çalıştırılmaz.


1

.NET uygulamaları, herhangi bir sayıda derlemeyi bir araya getirerek oluşturulur. Basitçe söylemek gerekirse, bir derleme, bazı türler (sınıflar, arabirimler, yapılar, vb.) Ve isteğe bağlı kaynaklar (görüntüler, dizgi tabloları ve başka şeyler) içeren, sürümü belirlenmiş, kendi kendini tanımlayan bir ikili dosyadan (DLL veya EXE) başka bir şey değildir. Şu anda acı bir şekilde farkında olunması gereken bir şey, bir .NET derlemesinin iç organizasyonunun klasik bir COM sunucusunun dahili organizasyonuna benzememesidir (paylaşılan dosya uzantılarına bakılmaksızın).


1

.NET'te, kaynak kodumuzu derlediğimizde derleme Visual Studio'da üretilir. Assembly Manifest ve IL (Intermediate Language) olmak üzere iki bölümden oluşur. Manifest, derleme meta verilerini içerir; derlemenin sürüm gereksinimleri, güvenlik kimliği, derlemeyi oluşturan tüm dosyaların adları ve karmaları anlamına gelir. IL, sınıflar, yapıcılar, ana yöntem vb. Hakkında bilgi içerir.



1

Visual Studio çözümleri bir veya daha fazla projeden oluşur. Örneğin: Konsol projeleri bir montaj üretebilir . Derleme, müşterilere ve fiziksel olarak bir .exe (yürütülebilir program) veya .DLL (diğer programlar tarafından yeniden kullanılabilir) gönderilebilen mantıksal olarak kod yığınlarıdır.


0

Derlemeler içerik, sürüm oluşturma ve bağımlılıklar hakkında bilgi içerir; bunları kullanan uygulamaların düzgün çalışması için Windows sistemlerindeki kayıt defteri gibi harici kaynaklara güvenmesi gerekmez. Montajlar .dll çakışmalarını azaltır ve uygulamalarınızı daha güvenilir ve dağıtımı kolaylaştırır.

Birlikte çalışmak ve mantıksal bir işlevsellik birimi oluşturmak için oluşturulmuş bir tür ve kaynak koleksiyonudur. Derlemeler, yürütülebilir (.exe) veya dinamik bağlantı kitaplığı (.dll) dosyaları biçimini alır ve .NET uygulamalarının yapı taşlarıdır. Ortak dil çalışma zamanına, tür uygulamalarının farkında olması için gereken bilgileri sağlarlar.

Her derlemenin bir derleme bildirim dosyası vardır. İçindekiler tablosuna benzer şekilde, derleme bildirimi şunları içerir:

  • Derlemenin kimliği (adı ve sürümü).
  • Oluşturduğunuz, .exe veya .dll dosyanızın dayandığı diğer derlemeler, bit eşlem dosyaları veya Benioku dosyaları gibi derlemeyi oluşturan diğer tüm dosyaları açıklayan bir dosya tablosu.
  • .Dlls veya diğer dosyalar gibi tüm harici bağımlılıkların bir listesi olan bir derleme referans listesi. Montaj referansları hem genel hem de özel nesnelere referanslar içerir. .NET Framework'te, genel nesneler genel derleme önbelleğinde (GAC) bulunur. System.IO.dll, GAC'deki bir derleme örneğidir. Özel nesneler, uygulamanızın yüklü olduğu dizinde veya altında bir dizin düzeyinde olmalıdır.

Bir uygulamada bir montaj kullanmak için, ona bir referans eklemelisiniz. Bir derlemeye başvurulduktan sonra, tüm erişilebilir türler, özellikler, yöntemler ve ad alanlarının diğer üyeleri, kodlarının kaynak dosyanızın bir parçasıymış gibi uygulamanızda kullanılabilir.

Dolayısıyla, Kaynak Kodumuzun Microsoft Ara Diline (MSIL) dönüştürüldüğünü hepimiz biliyoruz. Çalışma zamanında, CLR (Ortak Dil Çalışma Zamanı) MSIL'yi JIT derleyicisiyle Yerel koda dönüştürür. MSIL kodunu dönüştürmeden önce, MSIL + MetaData'yı (derleme adı, sürümü, referanslar) inceleyen bir doğrulama sürecinden geçmelidir: kodun tür açısından güvenli olup olmadığının belirlenip belirlenemeyeceğini bulmak için. doğrulamayı geçerse MSIL Yerel Koda dönüştürülür. Çağrılan tüm yöntemler makine diline dönüştürülür ve sonraki kullanım için önbelleğe kaydedilir.

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.