Версия сборки Номер версии сборки имеет формат major.minor.build.revision. Например, Значения major(старший), minor(младший), build (компоновка) и revision(ревизия) – неотрицательные целые числа. Значения старших и младших номеров должны обязательно присутствовать в номере версии сборки. Номер версии можно задать с помощью атрибута [ AttributeUsageAttribute(AttributeTargets.Assembly, Inherited=false)] public sealed class AssemblyVersionAttribute : Attribute [assembly: AssemblyVersion(" ")] Атрибут имеет один обязательный параметр – строка в формате major.minor.build.revision или major.minor.*. Например,
Соглашения о номере версии сборки Приняты следующие соглашения относительно версий сборки: Major Сборки с одним и тем же именем, но с разными значениями старшего номера версии не взаимозаменяемы. Например, значение major заменяется, если нет обратной совместимости с предыдущей версией. Minor Сборки с совпадающими именами и старшими номерами, которые отличаются младшими (minor) номерами, предполагают полную обратную совместимость с предыдущей версией. Build Отличие в номере компоновки означает перекомпиляцию одного и того же исходного файла для разных процессоров, платформ или другого компилятора. Revision Сборки с совпадающими именами, старшими и младшими номерами, но с разными ревизиями(revisions) полностью взаимозаменяемы. Это версии с небольшими изменениями и исправлениями, связанными, например, с решением проблем защиты в предыдущих версиях.
Строгое имя сборки.NET Framework поддерживает два вида сборок с нестрогими именами (weakly named); cо строгими именами (strong named). По умолчанию при компиляции создаются сборки с нестрогими именами (weakly named). Для сборки с нестрогим именем разрешено только закрытое (private) развертывание – в обычном каталоге. Для идентификации сборки с нестрогим именем CLR использует только имя из декларации сборки. При создании сборки со строгим именем (strongly named) используется криптографическая пара – открытый и закрытый ключи. Для сборки со строгим именем разрешено как закрытое, так и открытое развертывание – в глобальном кэше сборок (Global Assembly Cache - GAC). Для идентификации сборки со строгим именем CLR использует имя сборки, открытый ключ, номер версии и строку региональных стандартов (если она есть).
Сборки со строгим именем Для сборки со строгим именем необходимо сгенерировать пару ключей (открытый и закрытый). Это можно сделать с помощью утилиты SN.exe; встроенных средств Visual Studio В результате будет создан файл, содержащий криптографическую пару ключей - открытый и закрытый ключи в двоичном формате. Чтобы подписать сборку строгим именем, в исходный текст сборки достаточно добавить атрибут Компилятор подпишет сборку закрытым ключом и встроит открытый ключ в декларацию сборки. [assembly: AssemblyKeyFile(Имя_файла.keys)]
Сборки со строгим именем -2 Когда сборка подписывается закрытым ключом: при компоновке для каждого файла сборки рассчитывается хэш содержимого файла и вместе с именем файла сохраняется в декларации сборки; после компоновки исполняемого PE-файла рассчитывается хэш содержимого файла с декларацией; значение хэша подписывается закрытым ключом и результат (цифровая подпись RSA) заносится в PE-файл; открытый ключ заносится в PE-файл. Строгое имя сборки (имя файла, версия сборки, региональные стандарты и открытый ключ) гарантировано является уникальным. В таблице ссылок на другие сборки хранятся не открытые ключи, а маркеры открытого ключа - последние 8 байт хэша открытого ключа.
Сборки со строгим именем -3 Подписание сборки закрытым ключом защищает сборку от модификации, так как при установке сборки в GAC Windows вычисляет хэш файла сборки, в котором находится декларация, и сравнивает полученное значение с цифровой подписью RSA, встроенной в PE-файл, используя открытый ключ, который тоже находится в PE-файле. система вычисляет хэш-значения содержимого остальных файлов сборки и сравнивает их с теми значениями, которые хранятся в декларации. если хотя бы одно значение не совпадает, сборка не будет установлена в GAC. В Visual Studio 2008 есть встроенные средства для создания сборки со строгим именем: Project / Properties / Signing / Sign the assembly
Информация о сборке в процессе выполнения Информацию о сборке при выполнении приложения можно получить с помощью механизма отражения. В классе System.Type определено свойство public virtual string FullName { get; } // Имя сборки public bool GlobalAssemblyCache { get; } // Загружена из GAC public virtual string ImageRuntimeVersion { get; } // Версия CLR для сборки public abstract Assembly Assembly { get; } Класс Assembly можно использовать для загрузки сборок; анализа метаданных сборки; создания объектов определенных в сборке типов. Некоторые свойства класса Assembly
Информация о версии сборки Информацию о версии сборки при выполнении приложения можно получить с помощью метода класса Assembly public Version Version { get; set; } public CultureInfo CultureInfo { get; set; } public string Name { get; set; } public byte[] GetPublicKey (); public virtual AssemblyName GetName (); Класс AssemblyName содержит простое имя (simple name); номер версии (version number); открытый/закрытый ключи(cryptographic key pair); региональные стандарты (supported culture). Доступ к информации дают свойства и методы класса AssemblyName: