56
Chương 1: Phát triển ứng dụng
14.
14.
Qu n lý Global Assembly Cache
ả
Qu n lý Global Assembly Cache
ả
Bạn cần thêm hoặc loại bỏ assembly từ Global Assembly Cache (GAC).
Sử dụng công cụ Global Assembly Cache (gacutil.exe) từ dòng lệnh để xem nội
dung của GAC, cũng như thêm hoặc loại bỏ assembly.
Trước khi được cài đặt vào GAC, assembly phải có tên mạnh (xem mục 1.9 về cách tạo tên
mạnh cho assembly). Để cài đặt assembly có tên là SomeAssembly.dll vào GAC, sử dụng lệnh
gacutil /i SomeAssembly.dll
.
Để loại bỏ SomeAssembly.dll ra khỏi GAC, sử dụng lệnh
gacutil /u SomeAssembly
. Chú ý
không sử dụng phần mở rộng .dll để nói đến assembly một khi nó đã được cài đặt vào GAC.
Để xem các assembly đã được cài đặt vào GAC, sử dụng lệnh
gacutil /l
. Lệnh này sẽ liệt kê
tất cả các assembly đã được cài đặt trong GAC, cũng như danh sách các assembly đã được
biên dịch trước sang dạng nhị phân và cài đặt trong NGEN cache. Sử dụng lệnh
gacutil /l
SomeAssembly
để tránh phải tìm hết danh sách xem một assembly đã được cài đặt chưa.
.NET Framework sử dụng GAC chỉ khi thực thi, trình biên dịch C# sẽ không tìm
trong GAC bất kỳ tham chiếu ngoại nào mà assembly của bạn tham chiếu đến.
Trong quá trình phát triển, trình biên dịch C# phải truy xuất được một bản sao
cục bộ của bất kỳ assembly chia sẻ nào được tham chiếu đến. Bạn có thể chép
assembly chia sẻ vào thư mục mã nguồn của bạn, hoặc sử dụng đối số
/lib
của
trình biên dịch C# để chỉ định thư mục mà trình biên dịch có thể tìm thấy các
assembly cần thiết trong đó.
15.
15.
Ngăn ng
i khác d ch ng
c mã ngu n c a b n
ườ
ị
ượ
ồ ủ ạ
Ngăn ng
i khác d ch ng
c mã ngu n c a b n
ườ
ị
ượ
ồ ủ ạ
Bạn muốn bảo đảm assembly .NET của bạn không bị dịch ngược.
Xây dựng các giải pháp dựa-trên-server nếu có thể để người dùng không truy
xuất assembly được. Nếu bạn phải phân phối assembly thì không có cách nào để
ngăn người dùng dịch ngược chúng. Cách tốt nhất có thể làm là sử dụng kỹ
thuật obfuscation và các thành phần đã được biên dịch thành mã lệnh nguyên
sinh (native code) để assembly khó bị dịch ngược hơn.
Vì assembly .NET bao gồm một tập các mã lệnh và siêu dữ liệu được chuẩn hóa, độc lập nền
tảng mô tả các kiểu nằm trong assembly, nên chúng tương đối dễ bị dịch ngược. Điều này cho
phép các trình dịch ngược dễ dàng tạo được mã nguồn rất giống với mã gốc, đây sẽ là vấn đề
khó giải quyết nếu mã của bạn có chứa các thông tin hoặc thuật toán cần giữ bí mật.
Cách duy nhất để đảm bảo người dùng không thể dịch ngược assembly là không cho họ lấy
được assembly. Nếu có thể, hiện thực các giải pháp dựa-trên-server như các ứng dụng
Microsoft ASP.NET và dịch vụ Web XML. Với một chính sách bảo mật tốt ở server, không ai
có thể truy xuất assembly, do đó không thể dịch ngược chúng.