Apa sebenarnya Majelis di C # atau .NET?

102

Bisakah Anda menjelaskan apa yang dimaksud dengan Assembly di C # atau .NET?

  1. Di mana itu dimulai dan di mana itu berakhir?
  2. Informasi penting apa yang harus saya ketahui tentang Assemblies?
Roee Adler
sumber
5
Sebenarnya, bukankah assembly merupakan konsep .NET daripada konsep C #?
JeffH
14
@JeffH: ketika saya mengajukan pertanyaan, saya pikir itu adalah konsep C #. Sekarang saya mengerti itu. NET. Namun demikian, karena saya pikir orang lain mungkin bingung seperti saya, saya sengaja tidak mengubahnya agar Google mengakomodasi kesalahan ini ...
Roee Adler

Jawaban:

114

Rakitan adalah keluaran terkompilasi dari kode Anda, biasanya DLL, tetapi EXE Anda juga merupakan rakitan. Ini adalah unit penerapan terkecil untuk proyek .NET apa pun.

Rakitan biasanya berisi kode .NET dalam MSIL (bahasa Microsoft Intermediate) yang akan dikompilasi ke kode asli ("JITted" - dikompilasi oleh kompiler Just-In-Time) saat pertama kali dijalankan pada mesin tertentu. Kode yang dikompilasi itu juga akan disimpan di assembly dan digunakan kembali pada panggilan berikutnya.

Rakitan juga dapat berisi sumber daya seperti ikon, bitmap, tabel string, dan sebagainya. Selain itu, assembly juga berisi metadata dalam manifes assembly - informasi seperti nomor versi, nama kuat, budaya, majelis yang direferensikan, dan sebagainya.

Dalam 99% kasus Anda, satu rakitan sama dengan file fisik pada disk - kasus rakitan multi-file (satu rakitan, didistribusikan di lebih dari satu file) tampaknya menjadi kasus tepi bola yang agak aneh yang saya tidak pernah ditemukan sejauh ini dalam 5+ tahun pengembangan .NET saya.

Dalam rakitan multifile, hanya akan ada satu manifes rakitan dalam DLL atau EXE dan kode MSIL dalam beberapa file netmodule.

marc_s
sumber
1
@ marc_s: Saya pikir yang Anda maksud adalah file multi-assembly. Dimungkinkan untuk mengemas beberapa rakitan dalam satu file melalui alat baris perintah studio, tetapi tidak secara langsung melalui IDE.
Greg D
5
Hal yang sangat penting dalam sebuah assembly adalah metadata dalam manifes assembly. Manifes memiliki informasi seperti versi, nama kuat, budaya, rakitan yang direferensikan, dll. Dalam rakitan multifile, hanya akan ada satu manifes rakitan dalam sebuah dll atau exe dan kode MSIL dalam beberapa file .netmodule. Pada dasarnya perakitan adalah unit minimum penyebaran di> net
softveda
@marc_s: Saya akan sangat menghargai jika Anda menambahkan poin @ Pratik ke jawabannya, terima kasih
Roee Adler
@rax: selesai; @pratik: sekarang Anda membingungkan saya: Anda berbicara tentang "perakitan multi-file" lagi, sementara @GregD menyebutkan itu sebenarnya adalah "file multi-assembly" - apa itu sekarang ?? (seperti yang saya katakan - saya belum pernah menemukan binatang seperti itu, jadi saya agak tidak jelas apakah itu beberapa rakitan per file, atau beberapa file per rakitan ....)
marc_s
3
"Kode yang dikompilasi itu juga akan disimpan di assembly dan digunakan kembali pada panggilan berikutnya." Ini menyesatkan dan / atau tidak terlalu jelas. Tidak ada kode terkompilasi yang "disimpan" dalam sebuah assembly. Saya pikir Anda mungkin mengacu pada cara setiap metode / fungsi "jitted" ke kode asli saat pertama kali dipanggil. Kemudian, saat assembly berada dalam memori, versi kode asli dari metode tersebut dipanggil. Jika perakitan dibongkar, dan kemudian dimuat ulang, proses jit akan terjadi lagi. Tentu saja ini mengasumsikan bahwa Anda tidak menggunakan NGEN untuk melakukan pra-kompilasi rakitan Anda ke kode native (tidak disarankan).
Ash
13

Perakitan .NET

Dalam kerangka kerja Microsoft .NET, rakitan adalah pustaka kode yang dikompilasi sebagian untuk digunakan dalam penyebaran, pembuatan versi, dan keamanan.


sumber
7

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

Rakitan adalah file yang secara otomatis dihasilkan oleh kompilator setelah berhasil mengumpulkan setiap aplikasi .NET. Ini bisa berupa Dynamic Link Library atau file yang dapat dijalankan. Itu dibuat hanya sekali untuk aplikasi dan pada setiap kompilasi berikutnya perakitan diperbarui.

Raghav
sumber
2
Sidang berbeda dari file yang berisi mereka.
Greg D
1
@Raghav - Perbarui foto Anda dengan sesuatu yang biasa saja! Kami tidak berpose di sini untuk mendapatkan paspor, Anda tahu!
TheFlash
3

Berikut penjelasan lain dari make up dari .NET Assemblies, kutipan mini:

Kerangka .NET terdiri dari konsep modul, rakitan, yang menyimpan metadata dan informasi nyata. Perakitan dapat berisi banyak modul. Visual C # hanya pernah membuat satu modul yang diubah menjadi rakitan oleh kompiler C # (csc.exe), tetapi rakitan dapat menghubungkan banyak modul .NET bersama-sama melalui alat baris perintah assembly linker (al.exe). Misalnya, setiap file .cs kode sumber Anda dapat dikompilasi menjadi modul dan ditautkan bersama untuk membentuk rakitan - rakitan hanyalah kumpulan modul dan sumber daya. Namun, salah satu modul ini; harus berisi informasi metadata manifes (lihat di bawah) agar assembly dapat dipahami oleh CLR.
....
Setelah membuat .exe atau .dll baru di dalam VS.NET, Anda melihat file Anda muncul di dalam folder bin Anda. Membukanya di notepad akan memberikan omong kosong, atau bahkan di dalam editor heksadesimal tanpa mengetahui struktur file, Anda memerlukan alat seperti ildasm.exe atau CFF explorer untuk memaknainya. Struktur perakitan adalah sebagai berikut:

Header PE Header
CLR
Metadata
CLR
Kode CLR IL
Data asli

Chris S
sumber
Kemana tautan itu membawaku? Jenis pengalihan tak terbatas! Setelah beberapa pengalihan, saya dibawa ke halaman yang mengatakan ini . Juga tidak ada cara untuk mendapatkan URL asli yang Anda posting.
Sнаđошƒаӽ
2

Jawabannya adalah agar dapat segera digenggam.

Sederhananya, ini adalah proyek terkompilasi yang melibatkan kelas Anda dan file tambahan, jika ada. Artinya, setiap proyek dalam solusi adalah perakitan .

Atau lebih teknis,

Sebuah perakitan adalah di mana tipe disimpan dalam flesystem tersebut. Assemblies adalah mekanisme untuk menyebarkan kode. Misalnya, System.Data.dll rakitan berisi tipe untuk mengelola data. Untuk menggunakan tipe di majelis lain, mereka harus direferensikan. - Sumber

Bagaimana kita mengetahuinya? Jika Anda melihat sekilas properti proyek di bawah solusi, Anda dapat melihat gambar berikut.

Ketika Anda menyusun proyek, ternyata DLL atau EXE .

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

snr
sumber
1

Ketika kode sumber dikompilasi oleh kompiler bahasa itu Hasilkan Majelis Terkelola dan MSIL (MisroSoft Intermediate Language). Majelis itu berisi file .dll atau .exe . Assebmly dapat terdiri dari dua jenis Majelis Pribadi dan Majelis Bersama , Majelis bersama disimpan di GAC (Cache Majelis Global) sehingga aplikasi apa pun dapat merujuknya sementara perakitan pribadi disimpan dalam folder aplikasi yang hanya dapat digunakan oleh satu Aplikasi.

gaurav patni
sumber
0

Rakitan adalah DLL atau EXE yang akan dibuat saat Anda mempublikasikannya atau mengkompilasi aplikasi Anda.

Anup Shetty
sumber
0

Majelis adalah kumpulan unit logis. Unit logis mengacu pada jenis dan sumber daya yang diperlukan untuk membangun aplikasi dan menerapkannya menggunakan kerangka kerja .Net. Pada dasarnya, Assembly adalah kumpulan Exe dan DLL. Ini portabel dan dapat dieksekusi.

Abhay.Patil
sumber
-1

Setelah menulis kode sumber program Anda (proyek), maka sebuah file dibuat yang mungkin DLL atau EXE tergantung pada proyek Anda. Itu membuat hanya sekali untuk satu proyek. Ini memiliki dua tipe 1: - single 2: - shared atau multiprogram single assembly hanya digunakan dalam satu program sedangkan shared dapat digunakan untuk multiprogram

kirti kant pareek
sumber
Setelah menulis kode sumber program Anda (proyek), kemudian sebuah file dibuat yang mungkin DLL atau EXE tergantung pada proyek Anda - setelah menulis kode sumber? Tampaknya tidak menjadi indikasi yang sangat baik tentang kapan file itu dibuat, yang BTW tidak penting mengingat pertanyaan itu.
Sнаđошƒаӽ