93
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
•
Một
System.Reflection.AssemblyName
mô tả chi tiết về assembly.
•
Một mảng byte chứa dữ liệu câu thành assembly.
Thông thường, tên của assembly được sử dụng để nạp assembly. Tên đầy đủ của một
assembly bao gồm: tên, phiên bản, ban đia, và token khóa công khai, được phân cách bởi dấu
phẩy (ví dụ:
System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=
b77a5c561934e089
). Để chỉ định một assembly không có tên mạnh, sử dụng
PublicKeyToken=null
. Bạn cũng có thể sử dụng tên ngắn để nhận dạng một assembly nhưng ít
nhất phải cung cấp tên của assembly (không có phần mở rộng). Đoạn mã dưới đây trình bày
các cách sử dụng phương thức
Load
:
// Nạp assembly System.Data dùng tên đầy đủ.
string name1 = "System.Data,Version=1.0.5000.0," +
"Culture=neutral,PublicKeyToken=b77a5c561934e089";
Assembly a1 = Assembly.Load(name1);
// Nạp assembly System.Xml dùng AssemblyName.
AssemblyName name2 = new AssemblyName();
name2.Name = "System.Xml";
name2.Version = new Version(1,0,5000,0);
name2.CultureInfo = new CultureInfo("");
name2.SetPublicKeyToken(
new byte[] {0xb7,0x7a,0x5c,0x56,0x19,0x34,0xe0,0x89});
Assembly a2 = Assembly.Load(name2);
// Nạp assembly SomeAssembly dùng tên ngắn.
Assembly a3 = Assembly.Load("SomeAssembly");
Khi phương thức
Load
được gọi, bộ thực thi thực hiện quá trình định vị và nạp assembly. Dưới
đây sẽ tóm tắt quá trình này; bạn tham khảo tài liệu .NET Framework SDK để biết thêm chi
tiết.
1. Nếu bạn chỉ định assembly tên mạnh, phương thức
Load
sẽ áp dụng version policy
(chính sách phiên bản) và publisher policy (chính sách nhà phát hành) để cho phep kha
năng “chuyên tiếp” (redirect) đến môt phiên ban assembly khác. Version policy được
chỉ định trong file cấu hình máy tính hay ứng dụng của bạn bằng phần tử
<bindingRedirect>
. Publisher policy được chỉ định trong các assembly đăc biêt được
cài đặt bên trong GAC (Global Assembly Cache).
2. Một khi đã xác định đúng phiên bản của assembly cần sử dụng, bộ thực thi sẽ cố gắng
nạp các assembly tên mạnh từ GAC.
3. Nếu assembly không có tên mạnh hoặc không được tìm thấy trong GAC, bộ thực thi sẽ
tìm phần tử
<codeBase>
trong các file cấu hình máy tính và ứng dụng. Phần tử
<codeBase>
ánh xạ tên của assembly thành một file hay một URL. Nếu assembly có tên
mạnh,
<codeBase>
có thể chỉ đến bất kỳ vị trí nào kể cả các URL dựa-trên-Internet; nếu