2008-09-08 11 views
48

Tôi biết rằng khuôn khổ NET tìm kiếm DLL tham chiếu trong một số địa điểmThứ tự các vị trí được tìm kiếm để tải các DLL được tham chiếu theo thứ tự nào?

  • Global Assembly Cache (GAC)
  • Bất kỳ đường dẫn tin bổ sung vào AppDomain
  • Thư mục hiện hành của hội đồng thi

Các vị trí đó được tìm kiếm theo thứ tự nào? Việc tìm kiếm một DLL có ngừng lại nếu một kết quả trùng khớp được tìm thấy hay nó tiếp tục qua tất cả các vị trí (và nếu có, các xung đột được giải quyết như thế nào)?

Ngoài ra, vui lòng xác nhận hoặc từ chối các vị trí đó và cung cấp bất kỳ vị trí nào khác mà tôi đã không đề cập đến.

Trả lời

52

nạp hội là một quá trình khá phức tạp mà phụ thuộc vào nhiều yếu tố khác nhau như file cấu hình, chính sách xuất bản, cài đặt appdomain, Máy chủ CLR, tên lắp ráp một phần hoặc đầy đủ, v.v.

Phiên bản đơn giản là GAC là đầu tiên, sau đó là đường dẫn riêng. % PATH% không bao giờ được sử dụng.

Tốt nhất là sử dụng Assembly Binding Log Viewer (Fuslogvw.exe) để gỡ lỗi mọi sự cố tải lắp ráp.

EDIT http://msdn.microsoft.com/en-us/library/aa720133.aspx giải thích quy trình chi tiết hơn.

+1

Tôi không gặp phải bất kỳ vấn đề tải lắp ráp thực nào. Tôi đang cố gắng hiểu thứ tự tìm kiếm/tải từ góc độ học tập. –

+0

Và bạn nói đúng về '% đường dẫn%' ...Tôi đã nhầm lẫn điều này từ một số công việc với p/gọi cuộc gọi (tôi sử dụng '% đường dẫn%' để đơn giản hóa việc sử dụng 'DllImportAttribute'). –

+3

Nếu một dll .net tham chiếu đến một dll gốc, các đường dẫn có thể được sử dụng – rerun

2

"Không còn là thư mục hiện tại được tìm kiếm đầu tiên khi tải DLL! Thay đổi này cũng được thực hiện trong Windows XP SP1. bất kỳ đường dẫn do người dùng xác định nào. "

(. Ref http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx)

Trình tự serach mặc định, có thể được thay đổi bởi ứng dụng, cũng được mô tả trên MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx

+1

Điều này dường như phụ thuộc vào việc tải một Dll thông thường không phải là một hội đồng .net. – Tanerax

6

tôi thấy an article tham khảo bài viết MSDN trên DLL search order rằng nói

Đối với phụ thuộc mã được quản lý, Bộ nhớ cache toàn cầu luôn chiếm ưu thế; hội đồng địa phương trong đơn đăng ký sẽ không được chọn nếu có bản sao hiện có (hoặc mới hơn với ) trong GAC.

Xét này, tôi đoán danh sách MSDN là đúng với một Ngoài

0. Global assembly cache
+0

bài viết không còn tồn tại nữa, vì vậy chúng tôi không biết phần còn lại của danh sách dựa trên câu trả lời của bạn – Blub

+0

Tất cả các liên kết đều OK. –