Đặt tên mạnh được sử dụng cùng với "mã thông báo khóa công khai" để tạo một cụm tên hiển thị đầy đủ (mscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,.....
). Điều này cho phép chúng tôi có nhiều phiên bản của cùng một assembly bên cạnh trong cùng một thư mục ứng dụng.
Mã thông báo khóa công khai (và do đó, kỹ thuật đặt tên chuỗi) cũng cho phép trình tải .NET phát hiện xem có ai đã giả mạo nội dung lắp ráp của bạn kể từ khi bạn phân phối nó hay không. Điều này đúng bởi vì khi bạn ký một assembly với "token riêng" của bạn, trình biên dịch sẽ tạo ra một giá trị băm mà nó nhúng vào siêu dữ liệu lắp ráp mô tả phần công khai của "token riêng" của bạn. Sau đó, trình nạp có thể sử dụng giá trị này để xác định xem hội đồng của bạn đã được sửa đổi hay chưa.
Về hội giải quyết, có một vài điều cơ bản cần xem xét:
Probing Bộ nạp cố gắng xác định vị trí lắp ráp sử dụng một thư mục cơ bản "thăm dò" kỹ thuật. Điều này có nghĩa là nó sẽ cố gắng xác định vị trí "MyAssembly.dll
" (ví dụ) trong thư mục khởi động của ứng dụng, nếu không có, thì trong các thư mục con bên dưới thư mục đó. Nếu thăm dò không tìm được "MyAssembly.dll
" thì sự kiện AssemblyResolve
của AppDomain
bị kích hoạt.
cấu hình máy/User/System Các machine.config
, user.config
và system.config
được các file cấu hình lưu trữ cục bộ trên hệ thống mà người ta có thể sử dụng để thay đổi hành vi của resolver lắp ráp trên một "máy", "người sử dụng" hoặc cài đặt "toàn hệ thống".
Chính sách xuất bản Người ta có thể sử dụng "<assemblyIdentity>
" token XML trong tập tin cấu hình của ứng dụng của bạn (ví dụ, "MyApp.exe.config
") để trỏ đến phân giải lên một phiên bản nào đó của một assembly hoặc nạp một assembly từ một vị trí khác.
Tuỳ chỉnh độ phân giải Xử lý các "AssemblyResolve
" sự kiện của AppDomain
. Sự kiện này được nâng lên bất cứ khi nào một hội đồng không thể được giải quyết bằng các phương pháp "truyền thống"
Đến nay, cơ chế ít phức tạp nhất là xử lý sự kiện "AssemblyResolve".
Để tóm tắt, trình phân giải sẽ tìm trong thư mục hiện tại hoặc bộ nhớ cache lắp ráp toàn cầu, quy trình chính sách và sau đó cuối cùng cho phép giải quyết tùy chỉnh.
Nguồn
2009-08-05 20:03:52
"cho phép trình nạp .NET phát hiện xem có ai đã giả mạo nội dung lắp ráp của bạn ..." không nhận được điều đó hay không. –
Chắc chắn. Về cơ bản khi bạn biên dịch assembly của bạn với giá trị băm tên mạnh (bạn cũng có thể sử dụng tiện ích dòng lệnh sn.exe), giá trị băm được ghi vào siêu dữ liệu của assembly, mô tả phiên bản, văn hóa, tên và giá trị token của nó. Khi bộ tải nạp assembly của bạn, nó sẽ kiểm tra xem assembly của bạn có mã thông báo khóa công khai hay không, và chạy cùng một thuật toán băm trên assembly của bạn, so sánh nó với metadata trong assembly và từ chối tải assembly nếu chúng khác nhau. Đó là cách tải phát hiện "giả mạo". Nó rất hạn chế như bạn có thể thấy, nhưng đủ cho bây giờ. –
Trên bề mặt, nó trông giống như một cách để bảo vệ mã .NET của chúng tôi. Nhưng than ôi, sự phấn khích sẽ biến mất nhanh chóng và bạn sẽ sớm nhận ra rằng obfuscation là điều tốt nhất tiếp theo. –