Иллюстрированный самоучитель по Architecture .NET

Содержимое сборки

Декларация.publickeytoken

Чтобы сэкономить память, декларация .publickeytoken содержит только самые младшие 8 байтов кэш-кода открытого ключа производителя (он состоит из 128 байтов), вычисленного с помощью алгоритма SHA1. Однако, несмотря на это, она все же может использоваться для довольно надежной проверки. А вот декларация .publickey содержит полный открытый ключ. Конечно, она занимает больше места, но именно поэтому злодеям труднее найти секретный ключ, который соответствует полному открытому ключу.

Важно обратить внимание, что, хотя цифровой ключ уникален, он сам по себе не может идентифицировать фактического автора конкретного модуля. Однако разработчик сборки может использовать утилиту signcode, чтобы добавить цифровое свидетельство, которое может идентифицировать издателя сборки. А если зарегистрировать цифровое свидетельство у Certificate Authority (Полномочного свидетеля), например у VenSign, то пользователи смогут установить надежность источника.

Инструкция метаданных .hash = (09 ВВ ВС 09… 77) обеспечивает фиксированный размер представления хэш-кода двоичного содержимого mscorlib.dll. Если бы содержимое изменилось, в результате изменился бы и этот хэш-код. Несмотря на то, что хэш-код имеет компактное представление, он с высокой вероятностью характеризует сборку. Поэтому вычисленный на основе первоначальных данных, он может использоваться для многих целей, включая обнаружение ошибок и проверку. Хэш-код для сборки mscorlib, показанной выше, с высокой вероятностью характеризует двоичные данные сборки mscorlib.

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

Инструкция метаданных .ver 1:0:2411:0 указывает версию сборки mscorlib. Формат спецификации этой версии– Major:Minor:Build:Revision (Главный:Младший:Компоновка: Пересмотр). Через какое-то время, когда будут выпущены новые версии этой сборки, существующие клиенты, которые были скомпонованы так, чтобы использовать данную версию, продолжат использовать именно данную версию, по крайней мере те версии, у которых совпадают значения главного и младшего номера версий. Более новые клиентские программы, конечно, смогут обратиться к более новым версиям этой сборки, поскольку именно для них станут доступными новые версии.

Старые и новые версии могут быть развернуты буквально рядом посредством кэша глобальных сборок, и быть одновременно доступны старым и новым клиентским программам. Обратите внимание, что версия 1:0:2411:0, появляющаяся в клиентской декларации, принадлежит текущей версии сборки mscorlib и не связана с атрибутом версии 1.0.*, указанным в исходном тексте SimpleComponent. Вскоре мы более подробно рассмотрим четыре поля, которые составляют номер версии, а также управление версиями сборки.

До сих пор мы сосредотачивались на зависимостях, которые определены в декларации сборки SimpleComponent. Теперь давайте подробнее рассмотрим информацию в декларации, описывающую компонент SimpleComponent, содержащийся в сборке. Обратите внимание, что эта сборка не имеет цифровой подписи, и поэтому не содержит информации о ее создателе (т е, открытый ключ она в себе не содержит).

.assembly SimpleComponent
{
.hash algorithm 0x00008004
.ver 1:0:584:39032
}

Директива.assembly

Директива .assembly объявляет декларацию и определяет, какой сборке принадлежит текущий модуль. В данном примере директива .assembly определяет SimpleComponent (в качестве имени сборки. Именно это имя (вместе с номером версии и, возможно, открытым ключом), а не имя динамически подключаемой библиотеки (DLL) или исполняемого файла, используется во время выполнения для определения принадлежности сборки. Обратите также внимание, что, если сборка подписана, то в директиве .assembly будет определен параметр .publickey. Директива .assembly также указывает, добавлялись ли какие-либо пользовательские атрибуты к метаданным. Инструкция метаданных .assembly SimpleComponent указывает, что имя выборки – SimpleComponent. Имейте в виду, что это – не имя класса компонента в сборке, а само имя сборки.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.