Введение

Аналог ассемблера в Common Language Infrastructure. Определённая компанией Microsoft для использования в последних версиях Windows, сборка в Common Language Infrastructure (CLI) — это скомпилированная библиотека кода, используемая для развёртывания, управления версиями и обеспечения безопасности. Существуют два типа: исполняемые сборки (EXE) и библиотеки сборок (DLL). Исполняемая сборка представляет собой процесс, который будет использовать классы, определённые в библиотечных сборках. Сборки CLI содержат код в CIL, который обычно генерируется из языка CLI, а затем компилируется в машинный код во время выполнения JIT-компилятором (Just-in-Time). В реализации .NET Framework этот компилятор является частью среды выполнения Common Language Runtime (CLR). Сборка может состоять из одного или нескольких файлов. Файлы с кодом называются модулями. Сборка может содержать несколько модулей кода. И поскольку для создания модулей кода можно использовать разные языки программирования, технически возможно использовать несколько различных языков для создания сборки. Однако Visual Studio не поддерживает использование разных языков в одной сборке.

Сборные версии

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

Сборки и безопасность CLI

Безопасность доступа к коду CLI основана на сборках и доказательствах. Доказательством может быть любая информация, полученная из сборки, но обычно она формируется на основе источника сборки – будь то загрузка из Интернета, интрасети или установка на локальный компьютер (если сборка загружена с другого компьютера, она будет храниться в изолированной среде в GAC и, следовательно, не будет считаться локально установленной). Разрешения применяются ко всей сборке, и сборка может указать минимально необходимые ей разрешения с помощью пользовательских атрибутов (см. метаданные CLI). При загрузке сборки CLR использует доказательства для создания набора разрешений, включающего одно или несколько разрешений доступа к коду. Затем CLR проверяет, содержит ли этот набор разрешений необходимые разрешения, указанные сборкой. Код CLI может выполнять требование безопасности доступа к коду. Это означает, что код выполнит привилегированное действие только в том случае, если все сборки во всех методах стека вызовов обладают указанными разрешениями. Если хотя бы у одной сборки нет разрешения, возникает исключение безопасности. Код CLI также может выполнять связанное требование для получения разрешения из стека вызовов. В этом случае CLR проверяет только один метод в верхней части стека вызовов на наличие указанного разрешения. Здесь обход стека ограничивается одним методом в стеке вызовов, что позволяет CLR предполагать, что все остальные методы в стеке вызовов обладают указанными разрешениями. Сборка представляет собой комбинацию METADATA и MSIL-файла.

Спутниковые агрегаты

В целом, сборки должны содержать культурно-независимые ресурсы. Если вы хотите локализовать свою сборку (например, использовать разные строки для разных языковых стандартов), вам следует использовать спутниковые сборки – специальные сборки, содержащие только ресурсы. Как следует из названия, спутниковая сборка связана со сборкой, называемой основной. Эта сборка (например, lib.dll) будет содержать нейтральные ресурсы (которые Microsoft называет международным английским, но подразумевает под этим американский английский). Каждая спутниковая сборка имеет имя связанной библиотеки с добавлением к нему слова "resources" (например, lib.resources.dll). Спутниковая сборка получает имя, указывающее на конкретный языковой стандарт, но поскольку это игнорируется существующими файловыми системами Windows (FAT32 и NTFS), это означает, что в одной папке может быть несколько файлов с одним и тем же именем PE. Поскольку это невозможно, спутниковые сборки должны храниться в подпапках внутри папки приложения. Например, спутниковая сборка с английскими ресурсами для Великобритании будет иметь имя CLI "lib.resources Version=0.0.0.0 Culture=en-GB PublicKeyToken=null", имя файла PE – lib.resources.dll и будет храниться в подпапке с именем en-GB. Спутниковые сборки загружаются классом CLI System.Resources.ResourceManager. Разработчик должен предоставить имя ресурса и информацию об основной сборке (содержащей нейтральные ресурсы). Класс ResourceManager считывает языковой стандарт системы и использует эту информацию и имя основной сборки для определения имени спутниковой сборки и имени подпапки, в которой она находится. Затем ResourceManager может загрузить спутниковую сборку и получить локализованный ресурс.

Справочные сборки

Можно ссылаться на библиотеку исполняемого кода, используя флаг `/reference` компилятора C#.

Отсрочка подписания сборки

Общие сборки должны иметь надежное имя для однозначной идентификации сборки, которая может использоваться совместно несколькими приложениями. Надежное имя состоит из токена открытого ключа, культуры, версии и имени PE-файла. Если сборка, вероятно, будет использоваться для целей разработки как общая сборка, процедура надежного именования включает только генерацию открытого ключа. При этом закрытый ключ не генерируется. Он генерируется только при развертывании сборки.