Напомним, что идентификатор версии .NET компонуется из четырех числовых значений. По умолчанию Visual Studio 2005 автоматически будет выполнять приращение номеров компоновки и варианта (что обозначается групповым символом "*") при каждой компиляции. Чтобы установить фиксированное значение идентификатора версии для компоновочного блока, замените групповой символ конкретными значениями номера компоновки и варианта.
// Формат номера версии;
// ‹главный›.‹дополнительный›.‹компоновка›.‹вариант›
// Для каждого элемента допустимы значения от 0 до 65535.
[.assembly: AssemblyVersion ("1.0.0.0")]
Теперь компилятор C# имеет всю информацию, необходимую для генерирования данных строгого имени (поскольку вы не указали уникального значения для параметра локализации с помощью атрибута [AssemblyCulture], будут "унаследованы" текущие параметры локализации вашей машины). Выполните компиляцию библиотеки программного кода CarLibrary и с помощью ildasm.exe откройте ее манифест. Вы увидите, что в нем теперь используется лексема .publickey, с помощью которой документируется информация открытого ключа, а с помощью.ver представлен номер версии, указанный атрибутом [AssemblyVersion] (рис. 11.18).
Рис. 11.18. Строго именованный компоновочный блок записывает открытый ключ в манифест
Назначение строгого имени в Visual Studio 2005
Перед тем как установить CarLibrary.dll в структуру GAC, заметим, что Visual Studio 2005 позволяет указать место расположения файла *.snk на странице Properties (Свойства) проекта (в Visual Studio 2005 такой подход оказывается более предпочтительным, поскольку при использовании атрибута [AssemblyKeyFile] генерируется предупреждение компилятора). Выберите вкладку Signing (Подписи) и, указав путь к файлу *.snk, установите флажок Sign the assembly (Подписать компоновочный блок), как показана на рис. 11.19.
Рис. 11.19. Информация о файле *.snk на странице свойств проекта
Установка и удаление общедоступных компоновочных блоков
Заключительным шагом будет установка (теперь уже строго именованной) библиотеки CarLibrary.dll в структуру GAC. Проще всего установить общедоступный компоновочный блок в структуру GAС, перетащив файл компоновочного блока с помощью мыши в папку C:\Windows\assembly в программе Проводник Windows (это очень удобно при тестировании).
Кроме этого, .NET Framework 2.0 SDK предлагает утилиту командной строки gacutil.exe, которая позволяет просматривать изменять содержимое GAC. В табл. 11.1 показаны некоторые опции gacutil.exe (используйте флаг /?
Таблица 11.1. Опции gacutil.exe
| Опция | Описание |
|---|---|
| /i | Устанавливает строго именованный компоновочный блок в структуру GAC |
| /u | Удаляет компоновочный блок из структуры GAC |
| /l | Отображает компоновочные блоки (или конкретный компоновочный блок) в структуре GAC |
Используя любой из указанных подходов, установите CarLibrary.dll в структуру GAC. После этого вы должны увидеть, что ваша библиотека в структуре присутствует и учитывается (рис. 11.20).
Рис. 11.20. Строго именованная общедоступная библиотека CarLibrary (версия 1.0.0.0)
Замечание. При щелчке правой кнопкой мыши на пиктограмме любого компоновочного блока открывается контекстное меню, с помощью которого можно открыть страницу свойств компоновочного блока или деинсталлировать соответствующую версию (это эквивалентно использования флага /u с утилитой gacutil.exe).
Отложенная подпись
При создании своих собственных компоновочных блоков .NET вы можете назначать строгие имена, используя свой персональный файл *.snk. Но ваша компания или подразделение могут отказать вам в доступе к главному файлу *. snk. Ввиду исключительной важности файла, содержащего открытый и секретный ключи, этому удивляться не следует, но это, очевидно, является проблемой, поскольку у вас (как у разработчика) будет часто возникать необходимость установки компоновочных блоков в структуру GAC с целью тестирования. Чтобы позволить такое тестирование без предоставления настоящего файла *.snk, вы можете использовать метод
Процедура отложенной подписи начинается правомочным лицом, имеющим доступ к файлу *.snk, с извлечения из этого файла значения открытого ключа. Для этого используется sn.exe с опцией -р, позволяющей создать новый файл, содержащий значение открытого ключа.
sn -p myKey.snk testPublicKey.snk