2010-05-31 16 views
14

Tôi sẽ đưa ra một ví dụ về việc sử dụng System.Data.SQLite.DLL là một tập hợp hỗn hợp với mã không được quản lý: . này:Làm thế nào để tự động tải các assembly thô có chứa mã không được quản lý? (Bỏ qua 'Unverifiable code failed policy check' exception)

var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL") 

Không có ngoại lệ được ném, nhưng nếu tôi làm điều này:

var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL"); 
    var assembly = Assembly.Load(rawAssembly); 

Các CLR ném một fileloadexception với "mã xác minh được thất bại kiểm tra chính sách (ngoại lệ từ HRESULT: 0x80131402).". Giả sử tôi đang cố gắng tải assembly này trên một AppDomain con, làm thế nào tôi có thể tùy chỉnh bảo mật của AppDomain để cho phép tôi vượt qua kiểm tra chính sách?

+0

http://stackoverflow.com/a/24037103/1005741 Điều này có thể giúp ai đó! – hriziya

Trả lời

13

Chúng tôi là nạn nhân của thông báo ngoại lệ đáng sợ. Đang tải các assembly với Assembly.Load (byte []) có chứa mã không được quản lý trong không được hỗ trợ. Đây là chủ đề của số feedback item này.

CẬP NHẬT: mục phản hồi được liên kết đã biến mất, bị xóa như một phần của quá trình dọn dẹp tại thời điểm phát hành VS2012. Phần duy nhất của nó vẫn có thể phục hồi là đoạn này, sao chép từ một trang web khác:

“[...] chúng tôi chỉ cho phép hình ảnh ILOnly được nạp [...] kể từ khi bất cứ điều gì khác là không an toàn” -

CẬP NHẬT: liên kết được sửa bằng bản sao lưu archive.org.

+0

Bạn có thể cho ví dụ về cách tạo đối tượng bằng chứng thích hợp không? –

+0

Bạn đã thử sử dụng AppDomain.Current.Evidence chưa? –

+0

Tôi chưa từng, nhưng không phải đó chỉ là một bản sao của các thiết lập bảo mật của miền hiện tại (cái mà đã ném ngoại lệ ở nơi đầu tiên)? –

11

Vấn đề là CLR không thực hiện các bước tải DLL thông thường - như ánh xạ các phần riêng biệt vào các trang khác nhau, điều chỉnh fixups, v.v. Khi một assembly được nạp từ byte thô, các byte thô đó được ánh xạ vào bộ nhớ như vậy, và chỉ đọc siêu dữ liệu được quản lý. Không có số lượng bằng chứng hoặc cài đặt bảo mật nào sẽ thay đổi hành vi này.

Các vấn đề liên quan