
Assemblies
Cấu trúc Assembly
Một assembly thường bao gồm nhiều thành phần như:
Một Assembly metadata mô tả trọn vẹn assembly
Một Type Metadata mô tả các kiểu dữ liệu và các phương thức
Một MSIL code là đoạn mã viết theo ngôn ngữ trung gian
Các Resources là những tài nguyên như hình ảnh, chuỗi . . .
Được thể hiện như hình dưới đây :
Hình trên đây chỉ gồm một file component.dll duy nhất, tất cả nằm trọn
trong một tâp tin.
Tuy nhiên một assembly cũng có thể trải dài trên nhiều tập tin mà ta gọi là
multifile assembly Ở hình dưới đây assembly được trải dài trên ba tập tin và
ba tập tin kể trên hình thành một assembly duy nhất.
Metadata là gì ?
Metadata là thông tin được lưu trữ trên assembly mô tả những kiểu
dữ liệu và những phương thức thuộc assembly cung cấp những tin tức hữu
ích khác liên quan đến assembly .

Chính nhờ metadata nên các assembly thường được gọi là seft-describing
(mô tả bản thân) vì nó mô tả một cách trọn vẹn mỗi module.
Assembly Manifests
Mỗi assembly đều có một mainfest được gắn liền còn được gọi là
assembly metadata mô tả những gì được chứa trong assembly, bao gồm :
Tên nhận diện (identity name)
Một danh sách các tập tin thuộc assembly. Một assembly đơn lẻ phải
có ít nhất một tập tin, nhưng có thể chứa số các tập tin.
Một danh sách các assembly được qui chiếu. tất cả các tập tin khác
được dùng bởi assembly này bao gồm số phiên bản và các khoá dùng chung.
Khoá dùng chung được sử dụng duy nhất để xác định assemblies.
Một bộ các yêu cầu cho phép (permission request) những quyền hạn
cần có dể được phép chạy assembly này.
Một danh sách các kiểu dữ liệu và nguồn lực trong assembly, một bản
đồ nối liền các kiểu dữ liệu public với các đoạn mã thi công.
Private and Shared Assemblies
Assemblies nằm ở hai dạng: private assembly và shared assembly.
Dạng thứ nhất private assembly là một tập hợp (collection) những kiểu dữ
liệu chỉ dành riêng cho một ứng dụng sử dụng. Dạng thứ hai shared
assembly thì lại được chia sẽ sử dụng bởi nhiều ứng dụng.

Viewing Assemblies
Assemblies có thể được hiển thị khi sử dụng tiện ích command-line
ildasm dưới hỗ trợ của MSIL . Một assembly được mở khi bắt đầu ildasm
từ command_line với đối số assembly hoặc chọn lựa từ File | open menu
hình sau sẽ miêu tả một ildasm khi chúng ta xây dựng HelloCSharp.exe.
ildasm hiển thị the manifest, và HelloCSharp type trong
Wrox.ProCSharp.Assemblies.CrossLanguage namespace. Chúng ta có thể
thấy the version number, và thuộc tính assembly ngay khi mở assemblies
và versions của chúng. Mở phương thức của lớp , chúng ta có thể thấy
đuợc đoạn mã MSIL
ildasm Symbols
Các kí hiệu được sử dụng với ildasm trình bày dưới đây:

Symbol Description
Biểu diễn một namespace.
Biểu diễn một kiểu tham chiếu một lớp.Tương t
ự các ký
hiệu được sử dụng bởi các kiểu giá trị, nó có màu sáng
Biểu diễn một phương thức nhận và thi
ết lập các
accessors c
ủa một thuộc tính; "S" trong đồ hoạ có nghĩa
là phương thức tĩnh
Biểu diễn một trường
Biểu diễn một sự kiện
Biểu diễn một thuộc tính
Có nghĩa là có nhiều thông tin có giá trị nh
ư thông tin
manifest hoặc thông tin về miêu tả một lớp
Xây dựng (Building Assemblies)
Chúng ta vừa biết được assembly tiếp theo chúng ta biết cách để xây
dụng chúng. chúng ta sẽ xây dựng xuyên suốt bời vì .NET có khả năng thi

hành assembly phức tạp.nhưng chúng ta hãy xem trường hợp cụ thể cho
assemblies.
Tạo các Modules và Assemblies
Tất cả dự án (project) C# trong Visual Studio .NET đều tạo một
assembly. Cho dù bạn chọn một kiểu dự án DLL hoặc EXE , một assembly
luôn được tạo. Với trình biên dịch command-line C# csc, Nó cũng có khả
năng tạo modules. Một module là một DLL assembly không thuộc tính
(nên nó không có assembly, nhưng nó được thêm vào một assemblies lúc
sau). Dòng lệnh như sau:
csc /target:module hello.cs
Tạo một module hello.netmodule. Nó có thể nhìn thấy module này khi sử
dụng ildasm.
Một module cũng có một manifest, Nhưng chúng không có phần
.assembly bên trong the manifest (ngoại trừ assemblies nội , Chúng được
kham khảo), Vì một module không có assembly thuộc tính. Nó không thể
được cấu hình versions hoặc chấp nhận với modules; Chúng chỉ có thể tại
assembly gốc. Trong manifest của module, kham khảo đến assemblies có
thể được tìm thấy.
Để so sánh modules của assemblies, Ta tạo một lớp A và biên dịch nó: