Tạo tên mạnh cho Assembly với C#

? Bạn cần tạo tên mạnh cho một assembly để nó:
• Có một định danh duy nhất, cho phép gán các quyền cụ thể vào assembly khi cấu hình Code Access Security Policy (chính sách bảo mật cho việc truy xuất mã lệnh).
• Không thể bị sửa đổi và sau đó mạo nhận là nguyên bản.
• Hỗ trợ việc đánh số phiên bản và các chính sách về phiên bản (version policy).
• Có thể được chia sẻ trong nhiều ứng dụng, và được cài đặt trong Global Assembly Cache (GAC).
» Sử dụng các đặc tính (attribute) mức-assembly để chỉ định nơi chứa cặp khóa tên mạnh, và có thể chỉ định thêm số phiên bản và thông tin bản địa cho assembly. Trình biên dịch sẽ tạo tên mạnh cho assembly trong quá trình xây dựng.
Để tạo tên mạnh cho một assembly bằng trình biên dịch C#, bạn cần các yếu tố sau:
• Một cặp khóa tên mạnh nằm trong một file hoặc một kho chứa khóa CSP
• Sử dụng các đặc tính mức-assembly để chỉ định nơi trình biên dịch có thể tìm thấy cặp khóa tên mạnh đó.
▪ Nếu cặp khóa nằm trong một file, áp dụng đặc tính System.Reflection. AssemblyKeyFileAttribute cho assembly và chỉ định tên file chứa các khóa.
▪ Nếu cặp khóa nằm trong một kho chứa khóa CSP, áp dụng đặc tính System.Reflection.AssemblyKeyNameAttribute cho assembly và chỉ định tên của kho chứa khóa.
Ngoài ra, bạn có thể tùy chọn:
• Áp dụng đặc tính System.Reflection.AssemblyCultureAttribute cho assembly để chỉ định thông tin bản địa mà assembly hỗ trợ (Bạn không thể chỉ định bản địa cho các assembly thực thi vì assembly thực thi chỉ hỗ trợ bản địa trung lập).
• Áp dụng đặc tính System.Reflection.AssemblyVersionAttribute cho assembly để chỉ định phiên bản của assembly.
Đoạn mã dưới đây (trong file HelloWorld.cs) minh họa cách sử dụng các đặc tính (phần in đậm) để chỉ định khóa, bản địa, và phiên bản cho assembly:

Code:

using System;
using System.Reflection;

[assembly:AssemblyKeyName(“MyKeys”)]
[assembly:AssemblyCulture(“”)]
[assembly:AssemblyVersion(“1.0.0.0”)]

public class HelloWorld {

public static void Main() {

Console.WriteLine(“Hello, world”);
}
}

Để tạo một assembly tên mạnh từ đoạn mã trên, tạo các khóa tên mạnh và lưu trữ chúng trong file MyKeyFile bằng lệnh sn -k MyKeyFile.snk. Sau đó, sử dụng lệnh sn -i MyKeyFile.snk MyKeys để cài đặt các khóa vào một kho chứa khóa CSP có tên là MyKeys. Cuối cùng, sử dụng lệnh csc HelloWorld.cs để biên dịch file HelloWorld.cs thành một assembly tên mạnh.
§ Bạn cũng có thể sử dụng công cụ Assembly Linker (al.exe) để tạo assembly tên mạnh, cách này cho phép chỉ định các thông tin tên mạnh trên dòng lệnh thay vì sử dụng các đặc tính trong mã nguồn. Cách này hữu ích khi bạn không muốn nhúng các đặc tính tên mạnh vào file nguồn và khi bạn sử dụng kịch bản để xây dựng những cây mã nguồn đồ sộ.