C # veya .NET'te bir Assembly tam olarak nedir?


102

C # veya .NET'te Assembly'nin ne olduğunu açıklar mısınız?

  1. Nerede başlıyor ve nerede bitiyor?
  2. Meclisler hakkında hangi önemli bilgileri bilmeliyim?

5
Açıkçası, bir montaj bir C # konseptinden çok bir .NET konsepti değil mi?
JeffH

14
@JeffH: Soruyu sorduğumda bunun bir C # konsepti olduğunu düşündüm. Şimdi bunun bir .NET olduğunu anlıyorum. Yine de, diğer insanların da benim gibi kafalarının karışabileceğini düşündüğümden, Google'ın bu hatayı
telafi

Yanıtlar:


114

Bir derleme, kodunuzun derlenmiş çıktısıdır, genellikle bir DLL'dir, ancak EXE'niz de bir derlemedir. Herhangi bir .NET projesi için en küçük dağıtım birimidir.

Derleme tipik olarak, belirli bir makinede ilk kez çalıştırıldığında yerel koda ("JITted" - Just-In-Time derleyicisi tarafından derlenen) derlenecek olan MSIL (Microsoft Intermediate dili) .NET kodunu içerir. Derlenen bu kod ayrıca derlemede saklanacak ve sonraki çağrılarda yeniden kullanılacaktır.

Derleme ayrıca simgeler, bit eşlemler, dize tabloları ve benzeri kaynakları da içerebilir. Ayrıca, derleme, derleme bildiriminde meta verileri de içerir - sürüm numarası, güçlü ad, kültür, başvurulan derlemeler vb. Gibi bilgiler.

Vakalarınızın% 99'unda, bir montaj diskteki fiziksel bir dosyaya eşittir - çok dosyalı bir montaj durumu (tek bir dosyadan daha fazla dağıtılan bir montaj) oldukça garip bir uç durumu gibi görünmektedir. 5 yıldan fazla .NET geliştirmemde şimdiye kadar hiç karşılaşmadım.

Çok dosyalı bir derlemede, bir DLL veya EXE dosyasında yalnızca bir derleme bildirimi ve birden çok netmodule dosyasında MSIL kodu olacaktır.


1
@marc_s: Sanırım çoklu montaj dosyası demek istiyorsun. Stüdyonun komut satırı araçlarıyla tek bir dosya içinde birden çok derlemeyi paketlemek mümkündür, ancak doğrudan IDE aracılığıyla değil.
Greg D

5
Bir derlemedeki çok önemli bir şey, derleme bildirimindeki meta verilerdir. Bildirim, sürüm, kesin ad, kültür, başvurulan derlemeler vb. Gibi bilgilere sahiptir. Çok dosyalı bir derlemede, bir dll veya exe'de yalnızca bir derleme bildirimi ve birden çok .netmodule dosyasında MSIL kodu olacaktır. Temel olarak bir derleme,> net
softveda

@marc_s: Cevaba @ Pratik'in fikrini eklerseniz çok memnun olurum, teşekkürler
Roee Adler 01.09

@rax: tamamlandı; @pratik: şimdi kafamı karıştırıyorsun: tekrar "çoklu dosya birleştirme" den bahsediyorsun, @GregD bunun gerçekten bir "çoklu montaj dosyası" olduğundan söz ederken - şimdi ne var? (dediğim gibi - böyle bir canavarla hiç karşılaşmadım, bu yüzden dosya başına birden çok derleme mi yoksa derleme başına birden çok dosya mı olduğu konusunda biraz
kararsızım

3
"Derlenen kod ayrıca derlemede saklanacak ve sonraki çağrılarda yeniden kullanılacaktır." Bu yanıltıcı ve / veya çok açık değil. Derlemede hiçbir derlenmiş kod "depolanmaz". Her yöntemin / işlevin ilk çağrıldığında yerel koda "uydurma" şeklinden bahsediyor olabilirsiniz. Ardından, derleme bellekteyken, yöntemin yerel kod sürümü çağrılır. Montaj kaldırılırsa ve daha sonra yeniden yüklenirse, jit işlemi yeniden başlayacaktır. Elbette bu, derlemelerinizi yerel koda önceden derlemek için NGEN kullanmadığınızı varsayar (önerilmez).
Ash

13

.NET derlemesi

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

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

Derleme, her .NET uygulamasının başarılı bir şekilde derlenmesinin ardından derleyici tarafından otomatik olarak oluşturulan bir dosyadır. Dinamik Bağlantı Kitaplığı veya çalıştırılabilir bir dosya olabilir. Bir uygulama için yalnızca bir kez oluşturulur ve sonraki her derlemede derleme güncellenir.


2
Derlemeler, onları içeren dosyalardan farklıdır.
Greg D

1
@Raghav - Tanrı aşkına, fotoğrafınızı sıradan bir şeyle güncelleyin! Burada pasaportlar için poz vermiyoruz, biliyorsun!
TheFlash

3

İşte .NET Derlemelerinin yapısının başka bir açıklaması olan mini bir alıntı:

.NET çerçevesi, hem meta verileri hem de bildirim bilgilerini depolayan modüller, derlemeler kavramlarından oluşur. Bir montaj birden çok modül içerebilir. Visual C #, C # derleyicisi (csc.exe) tarafından bir derlemeye dönüştürülen yalnızca bir modül oluşturur, ancak bir derleme, derleme bağlayıcı (al.exe) komut satırı aracı aracılığıyla birçok .NET modülünü birbirine bağlayabilir. Örneğin, kaynak kodu .cs dosyalarınızın her biri bir modülde derlenebilir ve bir derleme oluşturmak için birbirine bağlanabilir - bir derleme yalnızca bir modül ve kaynaklar koleksiyonudur. Ancak bu modüllerden biri; CLR tarafından anlaşılması için derlemenin bildirim meta verileri (aşağıya bakın) bilgilerini içermesi gerekir.
....
VS.NET içinde yeni bir .exe veya .dll oluşturduğunuzda, dosyanızın bin klasörünüzün içinde göründüğünü görürsünüz. Not defterinde açmak anlamsızca veya hatta onaltılık bir düzenleyicinin içinde dosyanın yapısını bilmeden ortaya çıkarır, ondan anlam çıkarmak için ildasm.exe veya CFF explorer gibi bir araca ihtiyacınız vardır. Montajın yapısı aşağıdaki gibidir:

PE başlığı
CLR başlığı
CLR meta verileri
CLR
IL kodu
Yerel veriler


Bu bağlantı beni hangi cehenneme götürüyor? Bir çeşit sonsuz yönlendirmeler! Birkaç yönlendirmeler sonra diyor bir sayfaya götürdü bu . Gönderdiğiniz URL'yi orijinal almanın da bir yolu yok.
Sнаđошƒаӽ

2

Cevap, anında kavrayabilmek için.

Basitçe söylemek gerekirse, sınıflarınızı ve varsa ek dosyalarınızı içeren derlenmiş bir projedir. Yani çözümdeki her proje montajdır .

Ya da daha teknik olarak,

Bir derleme , bir türün flesystem içinde depolandığı yerdir. Derlemeler, kodu dağıtmak için bir mekanizmadır. Örneğin, System.Data.dll derleme verileri yönetmek için türler içerir. Tipleri diğer montajlarda kullanmak için bunlara referans verilmelidir. - Kaynak

Nasıl biliyoruz? Çözüm altında bir projenin özelliklerine bakarsanız aşağıdaki resimleri görebilirsiniz.

Projeyi derlediğinizde, DLL veya EXE'ye dönüşür .

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


1

Bir kaynak kodu dil derleyicisi tarafından derlendiğinde, Yönetilen Bir Derleme ve MSIL (MisroSoft Ara Dili) oluşturur. Bu Derleme .dll veya .exe dosyası içerir . Bir Assebmly, iki tür Özel Derleme ve Paylaşılan Derleme olabilir ; paylaşılan Derleme, GAC'de (Global Derleme Önbelleği) depolanır, böylece özel derleme yalnızca bir Uygulama tarafından kullanılabilen uygulama klasöründe saklanırken herhangi bir uygulama ona başvurabilir.


0

Derleme, uygulamanızı yayınladığınızda veya derlediğinizde oluşturulacak olan bir DLL veya EXE'dir.


0

Bir Montaj, mantıksal birimlerden oluşan bir koleksiyondur. Mantıksal birimler, bir uygulama oluşturmak ve bunları .Net çerçevesini kullanarak dağıtmak için gereken türleri ve kaynakları ifade eder. Temel olarak, Assembly, Exe ve DLL'lerin bir koleksiyonudur. Taşınabilir ve çalıştırılabilir.


-1

Programınızın (projenizin) kaynak kodunu yazdıktan sonra, projenize bağlı olarak DLL veya EXE olabilen bir dosya oluşturulur. Tek bir proje için yalnızca bir kez yapar. İki türü vardır 1: - tekli 2: - paylaşımlı veya çok programlı tekli montaj, yalnızca tek bir programda kullanılırken paylaşımlı çoklu program için kullanılabilir


Programınızın (projenizin) kaynak kodunu yazdıktan sonra , projenize bağlı olarak DLL veya EXE olabilen bir dosya oluşturulur - kaynak kodunu yazdıktan sonra? Bu dosyanın ne zaman oluşturulduğuna dair çok iyi bir gösterge gibi görünmüyor , soru göz önüne alındığında BTW önemsiz.
Sнаđошƒаӽ
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.