Apa itu .NET Assemblies?

193

Apa itu .NET Assemblies? Saya melihat-lihat di internet dan saya tidak dapat memahami definisi tersebut.

Massyle Djama
sumber
11
Baca CLR Via C # . Anda akan tahu semua tentang itu pada akhirnya. Saya sangat merekomendasikan buku ini.
David Neale

Jawaban:

169

Dalam istilah yang lebih sederhana: Potongan kode (yang dikompilasi) yang dapat dieksekusi oleh lingkungan .NET runtime. Program .NET terdiri dari satu atau lebih majelis.

Adrian Grigore
sumber
30
@ KimJongWoo - Tidak, file Jar hanyalah file zip yang berisi file bytecode yang dikompilasi. Perakitan adalah file PE (format Portable Executable) (yaitu DLL atau EXE), tetapi secara konseptual mereka melayani tujuan yang sama.
Erik Funkenbusch
Jadi itu seperti .classfile di dunia Java?
mljrg
245

Majelis adalah unit terkecil dari penyebaran aplikasi .net. Ini bisa berupa dll atau exe .
Ada dua jenis utamanya:

  1. Majelis Pribadi: Dll atau exe yang merupakan milik tunggal dari satu aplikasi saja. Biasanya disimpan dalam folder root aplikasi

  2. Majelis Umum / Bersama: Ini adalah dll yang dapat digunakan oleh banyak aplikasi sekaligus. Majelis bersama disimpan di GAC yaitu Global Assembly Cache .

Kedengarannya sulit? Naa ....
GAC hanyalah folder C: \ Windows \ Assembly di mana Anda dapat menemukan perangkat publik / dll dari semua perangkat lunak yang diinstal pada PC Anda.

Ada juga jenis perakitan ketiga dan paling tidak dikenal: Majelis Satelit .
Majelis Satelit hanya berisi objek statis seperti gambar dan file tidak dapat dieksekusi lainnya yang diperlukan oleh aplikasi.

Semoga ini bisa membantu para pembaca!

mangeshkt
sumber
3
Perhatikan bahwa lokasi berbeda untuk .NET 4.0: stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
TrueWill
itu bisa lambat. setelah folder mendapatkan seribu dari itu, windows menjadi lebih lambat mencoba untuk berjalan di pohon direktori atau hanya membaca direktori.
Jim Michaels
@mangeshkt - Apakah mungkin untuk menyalin dll dari satu aplikasi dan memasukkannya ke direktori root dari yang lain, apakah saya dapat menggunakan fungsi yang pertama?
Shivam657
57

Majelis

Saat Anda mengompilasi aplikasi, kode MSIL yang dibuat disimpan dalam sebuah majelis. Assemblies menyertakan file aplikasi yang dapat dieksekusi yang dapat Anda jalankan langsung dari Windows tanpa memerlukan program lain (ini memiliki ekstensi file .exe), dan perpustakaan (yang memiliki ekstensi .dll) untuk digunakan oleh aplikasi lain.

Selain mengandung MSIL, majelis juga menyertakan informasi meta (yaitu, informasi tentang informasi yang terkandung dalam majelis, juga dikenal sebagai metadata) dan sumber daya opsional (data tambahan yang digunakan oleh MSIL, seperti file suara dan gambar). Informasi meta memungkinkan majelis sepenuhnya deskriptif diri. Anda tidak memerlukan informasi lain untuk menggunakan perakitan, artinya Anda menghindari situasi seperti gagal menambahkan data yang diperlukan ke registri sistem dan sebagainya, yang sering menjadi masalah ketika mengembangkan dengan platform lain.

Ini berarti bahwa menyebarkan aplikasi seringkali sesederhana menyalin file ke direktori pada komputer jarak jauh. Karena tidak ada informasi tambahan yang diperlukan pada sistem target, Anda hanya dapat menjalankan file yang dapat dieksekusi dari direktori ini dan (dengan asumsi. NET CLR diinstal) Anda baik untuk pergi.

Tentu saja, Anda tidak perlu ingin memasukkan semua yang diperlukan untuk menjalankan aplikasi di satu tempat. Anda dapat menulis beberapa kode yang melakukan tugas yang diperlukan oleh banyak aplikasi. Dalam situasi seperti itu, sering kali berguna untuk menempatkan kode yang dapat digunakan kembali di tempat yang dapat diakses oleh semua aplikasi. Dalam .NET Framework, ini adalah Global Assembly Cache (GAC). Menempatkan kode di GAC sederhana - Anda cukup menempatkan majelis yang berisi kode di direktori yang berisi cache ini.

Saleh
sumber
Untuk kejelasan lebih lanjut "Ketika Anda mengompilasi aplikasi, kode MSIL yang dibuat disimpan dalam sebuah majelis". Hanya untuk menambahkan untuk melihat konten majelis Anda dapat menggunakan ILSPY.
Sandeep
33

Perakitan adalah file .dll aktual pada hard drive Anda tempat kelas-kelas dalam .NET Framework disimpan. Sebagai contoh, semua kelas yang terkandung dalam ASP.NET Framework terletak di majelis yang bernama System.Web.dll.

Lebih tepatnya, majelis adalah unit utama penyebaran, keamanan, dan kontrol versi di .NET Framework. Karena suatu majelis dapat menjangkau banyak file, suatu perakitan sering disebut sebagai dll "logis".

Catatan

.NET Framework (versi 2.0) mencakup 51 majelis.

Ada dua jenis majelis: pribadi dan bersama. Perakitan pribadi hanya dapat digunakan oleh satu aplikasi. Perakitan bersama, di sisi lain, dapat digunakan oleh semua aplikasi yang terletak di server yang sama.

Majelis bersama terletak di Global Assembly Cache (GAC). Misalnya, perakitan System.Web.dll dan semua majelis lain yang disertakan dengan .NET Framework berada di Global Assembly Cache.

Catatan

Global Assembly Cache terletak secara fisik di folder \ WINDOWS \ Assembly komputer Anda. Ada salinan terpisah dari setiap unit di folder \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 Anda. Set pertama rakitan digunakan saat runtime dan set kedua digunakan pada waktu kompilasi.

Sebelum Anda dapat menggunakan kelas yang terkandung dalam majelis di aplikasi Anda, Anda harus menambahkan referensi ke majelis. Secara default, aplikasi ASP.NET mereferensikan majelis paling umum yang terkandung dalam Cache Majelis Global:

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

Untuk menggunakan kelas tertentu dalam .NET Framework, Anda harus melakukan dua hal. Pertama, aplikasi Anda harus merujuk perakitan yang berisi kelas. Kedua, aplikasi Anda harus mengimpor namespace yang terkait dengan kelas.

Dalam kebanyakan kasus, Anda tidak akan khawatir tentang rujukan rakitan yang diperlukan karena rakitan yang paling umum dirujuk secara otomatis. Namun, jika Anda perlu menggunakan rakitan khusus, Anda perlu menambahkan referensi secara eksplisit ke rakitan. Misalnya, jika Anda perlu berinteraksi dengan Active Directory dengan menggunakan kelas-kelas di namespace System.DirectoryServices maka Anda perlu menambahkan referensi ke perakitan System.DirectoryServices.dll ke aplikasi Anda.

Setiap entri kelas dalam dokumentasi .NET Framework SDK mencantumkan perakitan dan namespace yang terkait dengan kelas. Misalnya, jika Anda mencari kelas MessageQueue dalam dokumentasi, Anda akan menemukan bahwa kelas ini terletak di System.Messaging namespace yang terletak di perakitan System.Messaging.dll.

Jika Anda menggunakan Visual Web Developer, Anda dapat menambahkan referensi ke rakitan secara eksplisit dengan memilih opsi menu Website, Add Reference, dan memilih nama rakitan yang perlu Anda rujuk. Sebagai contoh, menambahkan referensi ke hasil perakitan System.Messaging.dll dalam file konfigurasi web di Listing 1.4 yang ditambahkan ke aplikasi Anda.

Misalnya. Web.Config

enter code here

Jika Anda memilih untuk tidak menggunakan Visual Web Developer, maka Anda dapat menambahkan referensi ke perakitan System.Messaging.dll dengan membuat file dalam contoh di atas dengan tangan

Hung Vu
sumber
1
Jauh lebih teknis dari jawaban yang diterima, ini harus menjadi jawaban yang diterima.
sparkyShorts
8

Wikipedia mengatakan:

Dalam kerangka Microsoft .NET, majelis adalah pustaka kode yang dikompilasi sebagian untuk digunakan dalam penerapan, versi dan keamanan. Ada dua jenis: proses rakitan (EXE) dan rakitan perpustakaan (DLL). Majelis proses merupakan proses yang akan menggunakan kelas yang ditentukan dalam majelis perpustakaan. .NET assemblies berisi kode dalam CIL, yang biasanya dihasilkan dari bahasa CLI, dan kemudian dikompilasi ke dalam bahasa mesin saat runtime oleh kompiler just-in-time CLR. Perakitan dapat terdiri dari satu atau lebih file. File kode disebut modul. Majelis dapat berisi lebih dari satu modul kode dan karena dimungkinkan untuk menggunakan bahasa yang berbeda untuk membuat modul kode, secara teknis dimungkinkan untuk menggunakan beberapa bahasa yang berbeda untuk membuat perakitan.

Jika Anda benar-benar menelusuri, itu akan membantu jika Anda akan menjelaskan apa yang tidak Anda mengerti

Christina Mayers
sumber
7

Lihat ini :

Dalam Microsoft .NET framework, assembly adalah pustaka kode yang dikompilasi sebagian untuk digunakan dalam penyebaran, versi dan keamanan

Anton Gogolev
sumber
7

koleksi fisik Kelas, antarmuka, enum dll yang ada dalam kode IL. Yang bisa berupa file .EXE atau .DLL .EXE adalah file yang dapat dieksekusi dan .DLL dapat digunakan secara dinamis dalam bahasa apa pun yang didukung .net.

Govind Malviya
sumber
6

Majelis adalah unit runtime yang terdiri dari jenis dan sumber daya lainnya. Semua tipe dalam sebuah majelis memiliki nomor versi yang sama.

Seringkali, satu majelis hanya memiliki satu namespace dan digunakan oleh satu program. Tapi itu bisa menjangkau beberapa ruang nama. Juga, satu namespace dapat tersebar di beberapa majelis. Dalam desain besar, sebuah majelis dapat terdiri dari beberapa file yang disatukan oleh manifes (yaitu daftar isi).

Dalam C #, majelis adalah penyebaran terkecil dari aplikasi. Net. Ini bisa menjadi dll atau exe. Ini memiliki dua jenis: 1. Majelis Pribadi 2. Majelis Umum / Bersama

Abhishek Singh
sumber
6

Selain jawaban yang diterima, saya ingin memberi Anda contoh!

Sebagai contoh, kita semua gunakan

System.Console.WriteLine()

Tapi di mana kode untuk System.Console.WriteLine !?
kode mana yang benar-benar meletakkan teks di konsol?

Jika Anda melihat halaman pertama dari dokumentasi untuk kelas Konsol , Anda akan melihat di dekat bagian atas berikut ini: Majelis: mscorlib (dalam mscorlib.dll) Ini menunjukkan bahwa kode untuk kelas Konsol terletak di sebuah bly bernama mscorlib. Perakitan dapat terdiri dari beberapa file, tetapi dalam hal ini hanya satu file, yang merupakan pustaka tautan dinamis mscorlib.dll.

File mscorlib.dll sangat penting dalam .NET, Ini adalah DLL utama untuk pustaka kelas di .NET, dan berisi semua kelas dan struktur dasar.

jika Anda tahu C atau C ++, umumnya Anda membutuhkan arahan #include di bagian atas yang mereferensikan file header. File include menyediakan prototipe fungsi ke kompiler. Sebaliknya, C # compiler tidak membutuhkan file header. Selama kompilasi, kompiler C # mengakses file mscorlib.dll secara langsung dan memperoleh informasi dari metadata dalam file tersebut mengenai semua kelas dan tipe lain yang didefinisikan di dalamnya.

Compiler C # dapat menetapkan bahwa mscorlib.dll memang mengandung kelas bernama Konsol dalam namespace bernama Sistem dengan metode bernama WriteLine yang menerima argumen tunggal dari string tipe.

Compiler C # dapat menentukan bahwa panggilan WriteLine valid, dan kompiler membuat referensi ke rakitan mscorlib di executable.

secara default Kompiler C # akan mengakses mscorlib.dll, tetapi untuk DLL lainnya, Anda harus memberi tahu kompiler tentang perakitan tempat kelas-kelas itu berada. Ini dikenal sebagai referensi.

Saya harap sudah jelas sekarang!

Dari DotNetBookZero Charles pitzold

Ahmed KhaShaba
sumber
5

MSDN memiliki penjelasan yang bagus :

Assemblies adalah blok bangunan aplikasi .NET Framework; mereka membentuk unit dasar penyebaran, kontrol versi, penggunaan kembali, pelingkupan aktivasi, dan izin keamanan. Majelis adalah kumpulan jenis dan sumber daya yang dibangun untuk bekerja bersama dan membentuk unit fungsionalitas logis. Majelis menyediakan runtime bahasa umum dengan informasi yang perlu diperhatikan tentang implementasi tipe. Untuk runtime, tipe tidak ada di luar konteks perakitan.

Matt Warren
sumber
4

Majelis adalah kumpulan jenis dan sumber daya yang membentuk unit fungsionalitas logis. Semua tipe dalam .NET Framework harus ada di majelis; runtime bahasa umum tidak mendukung jenis di luar majelis. Setiap kali Anda membuat Aplikasi Microsoft Windows®, Layanan Windows, Perpustakaan Kelas, atau aplikasi lain dengan Visual Basic .NET, Anda membangun satu unit. Setiap rakitan disimpan sebagai file .exe atau .dll.

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

Bagi mereka yang memiliki latar belakang Java seperti saya harap diagram berikut menjelaskan konsep -

Assemblies sama seperti file jar (berisi beberapa file .class). Kode Anda dapat mereferensikan kumpulan yang ada atau kode Anda sendiri dapat dipublikasikan sebagai kumpulan untuk kode lain untuk referensi dan penggunaan (Anda dapat menganggap ini sebagai file jar di Jawa yang dapat Anda tambahkan dalam dependensi proyek Anda).

Pada akhirnya suatu perakitan adalah kode yang dikompilasi yang dapat dijalankan pada sistem operasi apa pun dengan CLR diinstal. Ini sama dengan mengatakan file .class atau jar yang dibundel dapat berjalan pada mesin apa pun dengan JVM diinstal.

masukkan deskripsi gambar di sini

Aniket Thakur
sumber
2

Di .Net, sebuah majelis dapat :

Sebuah kumpulan dari berbagai dikelola bagian mengandung Types (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config Filesdisusun Privatelyatau Publicly; dikerahkan ke folder localatau Shared (GAC); discover-ableoleh yang lain programs/assembliesdan; bisa versi-ed.

VS1
sumber
2

Karena assembly adalah unit terkecil dari keamanan versi, penyebaran dan penggunaan kembali kode di Microsoft.Net.

Itu mengandung:

- Assembly Identity
- Manifest
- Metadata
- MSIL Code
- Security Information
- Assembly Header
Lay Leangsros
sumber
1

Majelis adalah bagian mendasar dari pemrograman dengan .NET Framework. Ini berisi kode yang CLR mengeksekusi kode MSIL (Microsoft Intermediate Language) dalam file yang dapat dieksekusi portabel tidak akan dieksekusi jika tidak memiliki manifes perakitan yang terkait.

Kamini joshi
sumber
1

Aplikasi .NET dibangun dengan menyatukan sejumlah majelis. Sederhananya, sebuah majelis tidak lebih dari biner versi, yang menggambarkan diri sendiri (DLL atau EXE) yang berisi beberapa kumpulan tipe (kelas, antarmuka, struktur, dll.) Dan sumber daya opsional (gambar, tabel string dan yang lainnya). Satu hal yang harus disadari dengan susah payah sekarang, adalah bahwa organisasi internal rakitan .NET tidak seperti organisasi internal dari server COM klasik (terlepas dari ekstensi file bersama).

Shivam Sharma
sumber
1

Di .NET, ketika kami mengkompilasi kode sumber kami maka perakitan akan dihasilkan dalam Visual Studio. Majelis terdiri dari dua bagian Manifest dan IL (Intermediate Language). Manifest berisi metadata rakitan berarti persyaratan versi rakitan, identitas keamanan, nama, dan hash dari semua file yang membentuk rakitan. IL berisi informasi tentang kelas, konstruktor, metode utama, dll.

Gagan
sumber
1

Solusi Visual Studio terdiri dari satu atau lebih proyek. Misalnya: proyek konsol dapat menghasilkan perakitan . Perakitan secara logis merupakan potongan kode yang dapat dikirimkan ke pelanggan, dan secara fisik .EXE (program yang dapat dieksekusi) atau .DLL (dapat digunakan kembali oleh program lain).

Eldiyar Talantbek
sumber