Assemblies
Assembly là gì ?
Trước khi nền tảng .NET được gii thiệu, chúng ta đã phải giải quyết
với tiền assembly, DLL thường cung cấp các hàm dùng chung COM
DLLs cung cấp các lớp COM. Microsoft tgii thiu cụm từ "DLL-Hell" để
tnhững vấn đề truyền thống với DLL, những vn đề này dường như
chúng ta đã biết đó Thường các chương trình ứng dụng bdừng hoặc li
bởi vì ứng dụng i đặt gần nhất ghi đè mt DLL lên ứng dụng trước đó,
DLL này cũng được sử dụng bởi một ứng dụng khác. Thỉnh thoảng xảy
ra scài đặt thay thế một DLL mi cho một cái cũ bởi vì si đặt chương
trình kng kim tra phiên bn một cách chính xác, hoặc phiên bn không
thiết lp một cách chính xác. Bình thường chúng kng vấn đề gì nhưng
thực sự chúng có skhác biệt, đúng ra DLL mi nên được lùi lại tích hợp
với DLL cũ nhưng thỉnh thoảng không như vậy, đôi khi trường hợp này lại
sảy ra quá thường xuyên.
DLL Hell
Nền tảng .NET chính là DLL Hell tt cả vấn đề của là
assemblies. Assemblies là b cài đặt chính nó, bao gồm một hoặc nhiu
files. Một assembly thể là một đơn DLL hoặc EXE bao gồm cả metadata,
hoặc thể đuợc tạo từ nhiều file khác, thí dụ, các file nguồn, metadata,
DLLs, một EXE. Sự i đặt của một assembly có thđơn giản như là sao
chép tất cả các file của chính nó. Một tính năng mạnh của assemblies là
chúng thlà private hoặc shared. Vi COM đây là skhác biệt không
tồn tại, trước đây gần như tất cả các thành phn COM đều được chia sè.
Nếu bạn tìm kiếm tnh phn COM trong Registry hoặc sử dụng
OleView,bạn phải lục lội trong hàng trăm ng trăm c thành phần. Chỉ
một số nhỏ các thành phần đã được định nghĩa để sdụng tmột sứng
dụng, nhưng mỗi thành phn phải một khai báo toàn cục duy nhất (global
unique identifier) (GUID).
skhác biệt lớn giữa private và shared assemblies. Nhiều nhà phát trin
sẽ thích hơn nếu chỉ có private assemblies. Không có quản riêng, đăng ký,
xác định phiên bn và vy nên cần làm vic với private assemblies. Chduy
nhất ứng dụng chúng có vấn đề về phiên bn với private assemblies thì chính
là ứng dụng của bạn. các thành private bn sdụng mà ứng dụng của
bạn không được i đặt cùng thời gian với ng dụng. Tmục ứng dụng cục
bđược sử dụng cho các thành phần của assemblies, cho nên bn không nên
bất kỳ vấn đề về phiên bn. ng dụng khác chưa ghi đè lên private
assemblies của bạn. Tất nhiên nó cũng hay khi khi sử dụng phiên bn private
assemblies. li khi thay đổi code, Nhưng điều này không yêu cu
trong .NET.
Khi sdụng shared assemblies, Một vài ng dụng thể sử dụng assembly
này slệ thuộc vào chúng. Vi shared assemblies, phải thoả mãn một
squi tắc. Một shared assembly phải số phiên bn cthể, một tên duy
nhất và thường nó được cài đặt trong global assembly cache (GAC).
Các tính năng ca Assemblies
Các tính năng của assemblies có thể được tóm tắt như sau:
Assemblies miêu t bản thân (self-describing). không cn
thiết để đăng ký để nhận thư viện tnơi khác. Assemblies bao gm metadata
miêu tassembly. The metadata bao gồm các kiểu sinh ra tassembly và
một manifest; Chúng ta stìm hiu a manifest ở phần sau.
Độc lập phiên bản (Version dependencies) được ghi lại bên trong
assembly manifest. Bng cách chứa phiên bn của nhiu tham khảo
assemblies trong manifest của assembly, Chúng ta thể biết chính xác số
phiên bn cả tham khảo assembly đuợc sử dụng trong suốt quá trình pt
triển. Phiên bn của tham chiếu assembly được dùng để cấu hình bi các
nhà phát trên nhà quản trhệ thống (system administrator).Phần sau của
chương này chúng ta sẽ biết chúng làm vic như thế nào.
Assemblies có th được nạp side-by-side. S dụng Windows 2000
chúng ta tng bước một các tính năng và đâu là skhác biệt các phiên
bản của cùng DLL được s dụng trong h thống .NET m rộng các tính
năng cho Windows 2000, cho phép c phiên bn khác nhau của cùng
assembly để sdụng bên trong một tiến trình đơn giản, Vậy lợi ích đâu ?
Nếu assembly A tham khảo version 1 của shared assembly được chia s,
assembly B s dụng version 2 của shared assembly được chia s, bn
đang sử dụng cả hai assembly A and B, đoán xem versions của shared
assembly Chia s nào được dùng trong ứng dụng của bạn - bạn cần cả hai, và
với .NET chai versions được nạp và sử dụng.
Ứng dụng độc lập được đảm bảo sử dụng (vùng shữu ứng dụng)
application domains. Vi application domains một sc ứng dụng thể
chạy một cách độc lập trong một đơn tiến trình. Khuyết điểm trong một ng
dụng không thtrực tiếp nh hưởng các ng dụng khác bên trong cùng tiến
trình. S i đặt dễ ng như sao chép file ph thuộc vào assembly.
Xcopy th sao chép đẩy đủ. Tính năng này n zero-impact
installation.
Tại sao Microsoft Windows Installer (MSI) vẫn còn quan trọng.
Tôi thường hi tại sao Microsoft Windows Installer vẫn cần thiết trong khi
xcopy đã đủ để i đặt các ứng dụng .NET. Câu trlời đơn giản đó là chúng
ta thường muốn sao chép nhiều file hơn một file khi i đặt các ứng dụng
Windows.
Thường chúng ta truy xuất ứng dụng từ Start menu, cài đặt tmục con của
Program Files, Chúng ta m i thay đổi , hiển thị bản quyền, n vân . .
The Windows Installer htrợ rất nhiều tính năng thêm o khi không th
giải quyết với assemblies. Các ứng dụng s dụng với chính Registry
settings, group policies để dễ ng hơn trong quản nơi ngưi sử dụng
truy xuất c tính năng riêng biệt, advertisement để cài đặt c ng dụng
sau này, Khi yêu cầu bởi user, và sữa chữa các file bị sai lạc.
Application Domains
Application domain ("đa bàn hoạt động" của ng dụng, giống như
namespace là "địa bàn hoạt động" của c tên) một ci tiến quan trọng mà
.NET đem lại trước việc tiêu hao ký c (gọi là overheah) knhiu để bảo