Assemblies
Cấu trúc Assembly
Một assembly thường bao gồm nhiều thành phn 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à nhng tài nguyên như hình nh, chuỗi . . .
Được thể hiện như hình dưới đây :
Hình tn đâ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ó thtrải dài trên nhiu tập tin mà ta gi
multifile assembly hình dưới đây assembly được trải dài trên ba tp tin và
ba tp tin kể trên hình thành một assembly duy nhất.
Metadata là gì ?
Metadata thông tin được lưu trtrên assembly tnhững kiểu
dliu 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ô tmột cách trn vn mỗi module.
Assembly Manifests
Mỗi assembly đều một mainfest được gắn lin còn được gi là
assembly metadata mô tnhữ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 ch các assembly được qui chiếu. tất cả các tập tin khác
được dùng bi assembly này bao gm số phiên bn 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 cu cho phép (permission request) nhng quyền hạn
cần có dể được phép chạy assembly này.
Một danh sách c kiểu dliệ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 nm hai dng: 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
liu chỉ dành riêng cho một ng dụng sử dụng. Dạng thứ hai shared
assembly thì li được chia sẽ sử dụng bởi nhiều ứng dụng.
Viewing Assemblies
Assemblies thđược hiển thị khi sử dụng tiện ích command-line
ildasm dưới htrợ 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 tFile | open menu
hình sau s miêu t một ildasm khi chúng ta xây dựng HelloCSharp.exe.
ildasm hin thị the manifest, HelloCSharp type trong
Wrox.ProCSharp.Assemblies.CrossLanguage namespace. Chúng ta th
thấy the version number, thuộc tính assembly ngay khi massemblies
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í hiu đượ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
hiệu được sử dụng bởi các kiểu giá trị, nó có màu sáng
Biểu din 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ạ 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
nghĩa là nhiu thông tin giá trị nh
ư thông tin
manifest hoặc thông tin về miêu tmột lớp
Xây dng (Building Assemblies)
Chúng ta vừa biết được assembly tiếp theo chúng ta biết cách để y
dụng chúng. chúng ta sẽ xây dựng xuyên suốt bời vì .NET khnă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ù bn chọn một kiểu dự án DLL hoặc EXE , một assembly
luôn được tạo. Với trình bn dịch command-line C# csc, cũng khả
năng tạo modules. Một module một DLL assembly kng thuộc tính
(nên nó không assembly, nhưng được thêm vào mt assemblies lúc
sau). Dòng lệnh như sau:
csc /target:module hello.cs
Tạo một module hello.netmodule. thnhìn thấy module này khi s
dụng ildasm.
Một module cũng một manifest, Nhưng chúng kng có phn
.assembly n trong the manifest (ngoi trừ assemblies nội , Chúng được
kham khảo), Vì một module kng có assembly thuộc tính. không thể
được cấu hình versions hoặc chấp nhận với modules; Chúng chỉ thể tại
assembly gốc. Trong manifest của module, kham khảo đến assemblies có
thể được tìm thy.
Để so sánh modules của assemblies, Ta tạo một lớp A và bn dịch nó: