Assemblies
Một assembly một đơn vị luận chứa mã đã được biên dịch sang .NET.
Chúng ta sbàn kĩ về c assemblie trong cơng 8, đây chúng ta si
về nó.
Một assembly là một tự tả đầy đủ, và ging một đơn vị luận hơn
một đơn vị vật lí, điều đó nghĩa là thchứa trong nhiều file (thật
vậy các assemblie động được lưu trong bộ nhớ kng phải trong file). Nếu
một assembly được lưu trong nhiu file, thì s một file chính chứa c
con trvà các mô tả về các file khác của assembly.
Chú ý rng, câu trúc assembly được dùng chung cho cmã thi hành
thư viện. Sự khác biệt duy nhất là assembly thi hành chứa lối vào chương
trình chính trong khi assembly thư vin thì không có.
Một điểm quan trọng trong các assembly là chúng chứa metadata dùng để
t các kiểu phương thức được định nghĩa trong mã tương ứng. Mt
assembly, tất nhiên cũng chứ assembly metadata dùng để tả chính
assembly đó. Assembly metadata này, chứa một vùng đựơc hiu như là
manifest, cho phép kiểm tra phiên bn và tình trng của assembly.
ildasm, một tiện ích có sẵn của Windows, có thể dùng để nghiên cứu nội
dung của một assembly, bao gồm manifest metadata. Chúng ta slấy vi dụ
vildasm trong chương 8.
Thật vậy một assembly chứa metadata của chương trình nghĩa là các ng
dụng hoặc c assembly khác thể gọi mã trong môt assembly mà không
cần tham chiếu đến Registry, hoặc một dữ liệu nguồn khác,. Một điểm quan
trọng trong cách làm của COM cũ, các GUID của các thành phần và giao
diện interfaces không thể đạt được từ Registry.
Việc dàn tri dự liu thành 3 định vị khác nhau đồng nghĩa với việc tạo ra
mối nguy hiểm trong đồng bộ hoá, ngăn không cho các thành phần khác
sdụng. Với assemblies, skhông còn nhng mối nguy hiểm như vậy, bởi
tất các các metadata được lưu trong bộ lệnh thi hành ca chương trình.
Chú ý rằng dù cho các assemblie được lưu thành một vài file, chúng vn
không gây vn đề gì v đồng bộ hoá dữ liệu. Đó là nhvào file assembly
chính, file y chứa đường dẫn, các thông tin chi tiết, băm, nội dung
của các file khác, điều đó nghĩa là nếu mt file bthay thế, hay bị phá
hoại, nó sẽ được tìm ra và sẽ không cho load.
Assemblies bao gm 2 loại: các shared private assembly.
Private Assemblies
Private assemblies kiu đơn giản nhất. chứa phần mm và chđược
dùng cho phần mềm đó. Với phần mô tả này bn thể chứa đựng các
private assemblie hòng cung cấp cho một ứng dụng kiểu thực thi và một số
thư vin, các thư vin này cha mã sđược thi hành bi ứng dụng đó.
Hthống đảm bảo rằng private assemblies sẽ không được dùng bi phần
mm khác, bởi vì một ứng dụng chỉ có thể load private assemblies trong
cùng folder vi chương trình chính hoc là trong một tmục con của nó.
Chúng ta không thể tin cậy rằng tất cả các phần mm luôn được i đặt trong
thư mục của nó, nghĩa là skhông bao giờ chuyện một gói phần mm ghi
đè, sửa chữa hoặc vô tình load một private assemblies dành riền cho một i
khác. Vy m sao để các Private assemblie chỉ được dùng bi i phần
mm t? Cần mt chế bảo vệ, sao cho khi một sản phẩm
thương mại khác cài đè lên một phiên bn assembly mới (chưa kể đến các
chương trình đựơc thiết kế để phoại), thì skhông chuyện tranh chấp
tên. Nếu có sự trùng tên trong các assembly, đu đó không quan trọng và các
ứng dụng chỉ có thể nhìn thấy một bộ các assembly.
Bởi vì một private assembly là một tự đnh nghĩa trọn vẹn, tiến trình x
cực kì đơn giản. Bạn đơn giản thay thế c file thích hợp vào tmục thíhc
hợp trong file hthống (Không cn phải đăng kí trong registry). Tiến trình
này được gọi là zero impact (xcopy) installation.
Shared Assemblies
Shared assemblies được dành cho cácc thư viện công cộng thể dùng cho
bất kì ứng dụng nào. Bi vì bt kì ng dụng nào cũng có thể truy xuất một
shared assembly, cn phi có các chế để bảo vệ các rủi ro sau:
Tranh chấp tên, khi một ng ty tạo ra c shared assembly trùng n
với c shared assembly sẵn có của bạn. Vmặt thuyết mã của bạn thể
truy xuất vào cả hai assembly này song đây có thể là một vấn đề phức tạp.
Lỗi của mt assembly thể b ghi đè bi một phiên bn khác của
cùng same assembly - mt phiên bn mi không tương thích với những gì
sẵn có.
Giải pháp cho nhng vấn đề trên đặt c shared assembly trong mt y
thư mục đặt biệt của hệ thống, thxem như assembly cache toàn cục.
Không giống như các private assembly, không đơn giản là copy assembly
sang một thư mục tch hp - nó cn được cài đặt rõ ràng vào cache. Tiến
trình này có thđược thực thi bởi một số tin ích của .NET, bao gồm luôn
quá trình kim tra tn assembly, tương tự như cài đặt một thư mục trong
assembly cache để đảm bảo tính toàn vẹn của assembly.
Để tránh tranh chấp n, shared assemblies đưa ra một được quản dựa trên
một khóa mật mã chính. n này được gi là strong name, được bảo đảm
vtính độc nhất, và phải được trích dẫn bởi ng dụng muốn tham chiếu đến
một shared assembly.
Vấn đề về tương thích với li do ghi đè một assembly được đánh đa chỉ
theo thông tín phiên bn trong assembly manifest, cho phép cài đặt song
song.
Reflection
Từ khi các assembly được lưu dưới dạng metadata, bao gồm chi tiết về tất cả
các kiu và thành viên của những kiểu này, tth được truy xuất
được các metadata programmatically. Để biết chi tiết hơn, xin hãy xem
reflection - quthể xem xét các mã quản khác, hoặc xem xét chính
nó, để nhận ra các thông tin về mã. Bạn thể dùng c attribute, đ thể
sử dụng phương thức trong lúc chạy điều này tốt hơn là trong lúc biên dch.