1.3.2. Сборки, метаданные и промежуточный кодСогласно рассмотренной схеме разработки и выполнения приложений .NET, компиляторы исходных языков программирования, используемых разработчиками, компилируют приложение не в машинный код для конкретной операционной системы и процессора, а в промежуточный код на языке MSIL. Полученный таким образом исполняемый файл, помимо собственно кода приложения, содержит и метаданные — служебную информацию о приложении. Такие исполняемые файлы называются сборками и являются аналогами файлов EXE и DLL для обычных приложений. Затем при выполнении приложения сборка загружается операционной средой .NET Framework и уже там компилируется в машинный код. Такая схема выполнения приложения в архитектуре .NET дает существенные преимущества: Приложения .NET являются платформенно-независимыми при условии, что имеется соответствующий вариант операционной среды для той или иной операционной системы. Метаданные, прикомпилированные к коду приложения, позволяют избавиться от громоздких библиотек типов и регистрации в системном реестре, за что справедливо критикуют приложения СОМ. Приложение .NET готово к работе сразу. Сочетание служебной информации в метаданных и соответствующих механизмов в среде выполнения CLR обеспечивает такие полезные вещи, как, например, контроль версий. Но, конечно, у такого подхода есть и недостатки. Разработчики Microsoft, разумеется, знали об этом и постарались ликвидировать или минимизировать большинство проблем. Наиболее очевидные из них: Архитектура громоздка - для исполнения приложения нужна операционная среда. Необходимость компиляции в машинный код замедляет выполнение приложения. Код MSIL является небезопасным с точки зрения подделок - любая незашифрованная сборка может быть модифицирована кем угодно.
Состав сборки
В первую очередь (рис. 3), в состав сборки входит манифест - метаданные, включающие информацию о сборке: 1. версия приложения, состоящая из четырех чисел; 2. список имен файлов, составляющих сборку, а также контрольные суммы для каждого файла из списка; 3. список имен и версий других сборок, используемых данной сборкой; 4. список типов и ресурсов. Они делятся на два вида по доступности: только внутри сборки (internal) и вне сборки (public); 5. сведения о защите сборки: права на запуск, информация о лицензировании. Помимо файлов самой сборки манифест может содержать имена любых других необходимых приложению файлов, например: файлов изображений, документов XML, страниц HTML и т. д. Версия сборки состоит из двух частей и четырех чисел. Основная часть включает основную (major) и дополнительную (minor) версии приложения. Дополнительная часть содержит номер построения приложения (build) и номер ревизии (revision). При поиске сборки по номеру версии основная часть должна обязательно совпадать с искомой, а затем выбирается сборка с максимальной дополнительной частью. Рисунок 3. Виды сборок Далее сборка включает метаданные - сведения о приложении, необходимые для работы в среде выполнения CLR, прикомпилированные ресурсы и т. д. И, наконец, в сборку включается собственно код приложения, созданный на промежуточном языке MSIL. Благодаря наличию манифеста и метаданных, приложения .NET называются самоописываемыми, т. е. всю необходимую информацию о себе приложение «носит с собой». И это очень важное преимущество. Если вы вспомните приложения СОМ, то там для получения информации о приложении используется библиотека типов и само приложение нужно зарегистрировать в системном реестре. Без этого приложение СОМ просто не станет работать! А в .NET приложение готово к использованию сразу же после переноса на компьютер. При описании манифеста говорилось про списки используемых сборок. Это означает, что приложение может иметь в своем составе сборки других приложений, разрешенные к совместному использованию. Исходя из этого, сборки могут быть двух типов: приватные и разделяемые. Приватные сборки (private assemblies) доступны только в рамках приложения-владельца. Разделяемые сборки (shared assemblies) - для всех заинтересованных приложений. Такие сборки должны храниться в специальном глобальном кэше сборок. Обычно он находится в папке .WINNT\Assembly. Но для разделяемых сборок необходимо соблюдать правило уникальности именования. Если приложение хочет использовать разделяемую сборку, оно не должно содержать одноименную сборку.
Метаданные
Когда компилятор .NET создает код MSIL, параллельно он производит и метаданные, которые включаются в файлы сборки приложения. Метаданные содержат всю информацию о приложении, необходимую для его исполнения в среде выполнения CLR. Важной составной частью метаданных является манифест, который уже был рассмотрен. Но помимо него метаданные включают и другие сведения: имя приложения; публичный ключ; информацию о типах; атрибуты; ресурсы. Публичный ключ необходим в системе безопасности среды выполнения CLR для расшифровки зашифрованных сборок. Информация о типах определяет, какие типы экспортируются приложением. Она включает название типа, его доступность, базовый класс и члены типа (поля, методы, события). Атрибуты сборки - настраиваемый набор элементов. Разработчик может добавить сюда собственные элементы с любой необходимой информацией о сборке или экспортируемых типах. Если сборка содержит метаданные, то код приложения является управляемым — пригодным для выполнения в среде выполнения CLR. В противном случае код называется неуправляемым. Компиляторы Delphi, C#, Visual Basic генерируют управляемый код. Компилятор C++, в зависимости от настроек, может создавать коды обоих видов. Если приложение .NET работает с каким-либо сервером СОМ, то оно использует неуправляемый код.
|