.Net Assembly Kavramı

Bir Assembly, .NET Framework’te hedeflenen derlenmiş kodu içeren mantıksal birimdir.

Bir Assembly, tamamen kendi kendini tanımlayan bir dildir ve fiziksel bir birim olmaktan ziyade, bir dosyadan daha fazla miktarda dosyanın bir arada depolanabileceği anlamına gelen mantıksal bir birimdir. Bir assembly, birden fazla dosyada depolanırsa giriş noktasını içeren ve assembly’deki diğer dosyaları tanımlayan bir ana dosya olacaktır.

Bir Assembly, .NET ortamında yazılan programlar derlenirken programa ait olan tüm elemanlar, metotlar, sınıflar, değişkenler metadata dediğimiz bilgiler ile birlikte derlenmektedir. Kaynak kodların ve metadata bilgilerinin bulunduğu .NET birimini assembly olarak adlandırabiliriz. Yani aslında derlenmiş her birim assembly adını alır. Bunlar exe ve dll dosyalarıdır.

.NET ortamındaki bir programlama dilinin derleyicisi kullanılarak bir .dll ya da .exe oluşturulduğunda, bu bir assembly içerisine koyulur. Assembly, CIL kodu içerir ve bu kod, ihtiyaç duyulana kadar platforma özel bilgilere derlenmez.

Bir Assembly oluşması durumu aşağıdaki şekildeki gibidir.

Bir Assembly aşağıdaki parçalardan oluşur.

Metadata ve Manifesto

Assembly, CIL dışında bir de metadata içerir. Tip metadata, binary içerisindeki her bir tipin ayırt edici özelliklerini tanımlar. Şöyle bir örnek vereyim: Mevcut evimizden başka bir eve taşınırken eşyaları kutulara koyarız. Eğer kutuların üzerine tek tek içerisinde neler olduğunu bir kağıda yazıp yapıştırırsak yeni evimizde açarken aradığımızı kolayca buluruz. Metadata, kutunun üzerindeki bu listedir ve assembly içerisindeki .dll ya da .exe’nin sahip olduğu tüm tipler hakkında bilgi içerir. Örneğin X adında bir sınıf varsa, tip metadası X sınıfının türediği sınıf, varsa hangi arayüzleri uyguladığı gibi ayrıntıları taşırken, X tipinin metotları, alanları vb. her bir üyesinin tüm tanımlamalarını içerir.

Bir assembly’de aynı zamanda kendisini tanımlayan bilgileri içeren assembly metadata bölümü bulunur. Assembly adı, versiyonu,kültür bilgisi, kısa bir açıklama, başka assembly’lere olan referanslar gibi bilgilerin tamamına assembly metadata denir ve manifesto adıyla assembly içerisinde yer alır. Bir assembly’nin assembly metadatası taşımasının arkasındaki gerçek, içerisindeki kodu çağıran uygulama ya da diğer assembly’lerin o assembly’yi nasıl kullanacaklarını öğrenmek için registry’ye ya da başka bir veri kaynağına başvurmalarına gerek kalmamasıdır.

Öyleyse bir assembly içerisindeki kaynak kodun CIL karşılığı, tip metadatası, manifesto bilgisi ve kaynaklar yer alır.

Assembly’lerın kendi içeriklerini bilmeleri, çalışma zamanında bu bilgilerin elde edilip kullanılabileceği anlamına gelir ki, bu eklenti (plug-in) tabanlı programlama içerisinde önem arz eden bir konudur ve reflection (yansıma) olarak isimlendirilir. Visual Studio uygulama geliştirme ortamının intelli-sense özelliği, bu kavramdan faydalanarak çalışır.

(KAYNAK : http://www.emrahuslu.com)

Yorumlar