Процесс создания строгого имени.

Для создания строгого имени сборки сначала генерируются данные открытого и

секретного ключей с помощью поставляемой в составе .NET Framework 4.0 SDK

утилиты sn. ехе. (Эта утилита генерирует файл, который обычно оканчивается расширением * . snk (Strong Name Key — ключ строгого имени) и содержит данные для двух разных, но математически связанных ключей — "открытого" и "секретного".)

После указания местонахождения этого файла * . snk компилятору С# тот запишет полное значение открытого ключа в манифест сборки с использованием дескриптора .publickey.

Компилятор С# генерирует на основе всего содержимого сборки (CIL-кода, метаданных и т.д.) соответствующий хеш-код. (хеш-кодом называется числовое значение, которое является статистически уникальным для фиксированных входных данных.)

Следовательно, в случае изменения какого-то аспекта сборки .NET (даже одного символа в строковом литерале), компилятор выдает другой хеш-код. Далее этот хеш-код объединяется с содержащимися внутри файла * . snk данными секретного ключа для получения цифровой подписи, вставляемой в сборку внутрь данных заголовка CLR.

Процесс создания строгого имени. - student2.ru

Назначение и применение утилиты sn.exe

Для создания строгого имени сборки сначала генерируются данные открытого и секретного ключей с помощью утилиты sn.exe поставляемой в составе .NETFramework 4.0 SDK. Эта утилита генерирует файл, который обычно оканчивается расширением *.snk (StrongNameKey– ключ строгого имени) и содержит данные для двух разных, но математически связанных ключей – «открытого» и «секретного». После указания местонахождения этого файла *.snk компилятору С# тот запишет полное значение открытого ключа в манифест сборки с использованием дескриптора publickey.

Установка разделяемой сборки.

Назначение и применение утилиты gacutil.exe

Как и одноименное средство от Microsoft, утилита gacutil из состава Mono может устанавливать и удалять сборки, а также выводить список сборок, установленных в кэше C:\ProgramFiles\Mono-<версия>\lib\mono\gac. Следующая команда развертывает сборку CorLibDumper.dllв GAC и регистрирует ее в компьютере как общедоступную сборку:

gacutil –ICorLibDumper.dll

Если после выполнения этой команды открыть каталог \gac, то вы увидите там новую папку с именем CorLibDumper. Эта папка определяет подкаталог.

Опция –l утилиты gacutil выводит список всех сборок в MonoGAC.

Назначение и применение утилиты ildasm.exe

Манифест сборки.

Манифест – метаданные, которые описывают саму сборку. В манифесте документируются все внешние сборки, которые требуются текущей сборке для корректного функционирования, версия сборки, информация об авторских правах и т.д. Как и за генерацию метаданных типов, за генерацию манифеста сборки всегда тоже отвечает компилятор.

Для того чтобы сборки действительно были независимыми от системы и от других сборок, необходимо, чтобы они сопровождались явным описанием предоставляемых ими сервисов и зависимостей от внешнего мира. Роль такого описания выполняет так называемый манифест сборки.

В манифесте должны быть перечислены все файлы и модули, из которых состоит данная сборка, а также должны быть четко прописаны все интерфейсы со внешним миром. Кроме того, манифест должен указывать, каким образом реализуются обращения к типам и ресурсам, экспортируемым из данной сборки. Естественно, что впоследствии во время компиляции и загрузки необходимо будет учесть и разрешить все внешние зависимости данного приложения.

Таким образом, манифест является тем инструментом, который позволяет скрыть от потребителя детали реализации. Именно благодаря этому механизму каждая сборка является самодостаточной и не требует привлечения внешних средств, таких как реестр. Это позволяет в большинстве случаев свести установку приложения к простому копированию.

Уникальность сборки

Каждая сборка имеет уникальное имя, которое состоит из следующих частей: префикса, основанного на открытом ключе разработчика, простого текстового имени, номера версии и информации о локализации. Некоторые сборки могут иметь только простое текстовое имя, но в таких случаях их можно использовать только как часть другого приложения (так как иначе нельзя гарантировать их уникальность).

Наши рекомендации