94
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
không,
<codeBase>
phải chỉ đến một thư mục co vi tri tương đối so với thư mục ứng
dụng. Nếu assembly không tồn tại trong vị trí được chỉ định, phương thức
Load
sẽ ném
ngoại lệ
System.IO.FileNotFoundException
.
4. Nếu không có phần tử
<codeBase>
tương ứng với assembly, bộ thực thi sẽ tìm assembly
bằng kỹ thuật probing. Quá trình probing sẽ tìm file đầu tiên có tên của assembly (với
phần mở rộng là .dll hay .exe) trong các vị trí:
•
Thư mục gốc của ứng dụng.
•
Các thư mục con cua thư mục gốc phù hợp với tên và ban đia của assembly.
•
Các thư mục con (cua thư mục gôc) do ngươi dung chi đinh.
Phương thức
Load
là cách dễ nhất để tìm và nạp các assembly, nhưng cũng có thể tốn nhiều
chi phí cho việc dò trong nhiều thư mục để tìm các assembly có tên yếu. Phương thức
LoadFrom
cho phép bạn nạp assembly từ một vị trí xác định, nếu không tìm thấy nó sẽ ném
ngoại lệ
FileNotFoundException
. Bộ thực thi sẽ không cố tìm assembly như phương thức
Load
—phương thức
LoadFrom
không hỗ trợ GAC, policy, phần tử
<codeBase>
hay probing. Dưới
đây là đoạn mã trình bày cách sử dụng
LoadFrom
để nạp c:\shared\MySharedAssembly.dll. Lưu
ý rằng, khác với
Load
,
LoadFrom
yêu cầu bạn chỉ định phần mở rộng của file assembly.
// Nạp assembly có tên là c:\shared\MySharedAssembly.dll
Assembly a4 = Assembly.LoadFrom(@"c:\shared\MySharedAssembly.dll");
6.
6.
Th c thi assembly mi n ng d ng khác
ự
ở ề ứ
ụ
Th c thi assembly mi n ng d ng khác
ự
ở ề ứ
ụ
Bạn cần thực thi một assembly ở một miền ứng dụng khác vơi miền ứng dụng
hiện hành.
Gọi phương thức
ExecuteAssembly
của đối tượng
AppDomain
đai diên cho miền
ứng dụng, và chỉ định tên của assembly cần thực thi.
Nếu bạn có một assembly khả-thực-thi và muốn nạp để thực thi nó trong một miền ứng dụng,
phương thức
ExecuteAssembly
sẽ giúp bạn. Phương thức
ExecuteAssembly
có bốn dạng thức
khác nhau. Dạng thức đơn giản nhất chỉ nhận vào một kiểu
string
chứa tên của assembly cần
thực thi; bạn có thể chỉ định một file cục bộ hay một URL. Một dạng thức khác cho phép bạn
chỉ định chứng cứ (evidence) cho assembly (xem mục 13.10) và các đối số để truyền đến điểm
nhập của assembly (tương đương với các đối số dòng lệnh).
Phương thức
ExecuteAssembly
nạp assembly được chỉ định và thực thi phương thức được định
nghĩa trong siêu dữ liệu là điểm nhập của assembly (thường là phương thức
Main
). Nếu
assembly được chỉ định không có khả năng thực thi,
ExecuteAssembly
sẽ ném ngoại lệ
System.Runtime.InteropServices.COMException
. Bộ thực thi không thực thi assembly trong
một tiểu trình mới, vì thế quyền kiểm soát sẽ không trả về cho đến khi quá trình thực thi của
assembly kết thúc. Do
ExecuteAssembly
nạp một assembly bằng tên riêng phân (chỉ có tên
file), CLR sẽ không dùng GAC hay probing để tìm assembly (xem mục 3.5 để biết thêm chi
tiết).