
Assemblies.ppt 2 лекция
- Количество слайдов: 37
Платформа Microsoft. NET Кафедра системного программирования С. -Петербургского государственного университета Сорокин Антон, e-mail: anton. v. sorokin@gmail. com
Лекция 2: Сборка (assembly) • Что такое сборка • Развёртывание • Безопасность, управление версиями, политики
Компиляция в. NET Исходные файлы на C# Исходные файлы на VB. NET Исходные файлы на J# Компилятор C# Компилятор VB. NET Компилятор J# Управляемый модуль
Управляемый модуль • Управляемый модуль (managed module) – результат компиляции исходного кода • Стандартный переносимый исполняемый файл (PE, portable executable) Части управляемого модуля: • Заголовки PE и CLR (тип файла, время сборки, etc) • Метаданные • Код на MSIL
Метаданные • Создаются компилятором • Полное описание типовой информации (определяемой и используемой) • Расширяют возможности старых технологий, таких как IDL • Всегда связаны с кодом на IL (генерируются одновременно) синхронизированы • Присутствие метаданных обязательно. Без них загрузить или развернуть компонент невозможно
Использование метаданных Устранение необходимости в заголовочных и библиотечных файлах при компиляции: Раньше Сейчас По IDL или TLB (хорошо, если они были!) генерировались заголовочные файлы Сразу можно использовать типы из бинарного файла Sample #import "Tralfamador. tlb" raw_interfaces_only, rename_namespace("Tralfamador"), named_guids
Сборка Управляемый модуль (IL + метаданные) Сборка CSC (компилятор C#) Управляемый модуль (IL + метаданные) VBC (компилятор VB. NET) AL Управляемый модуль (IL + метаданные) (компоновщик сборок) Манифест сборки (набор файлов) Управляемый модуль Файл ресурсов
Сборка • Логическая единица (аналог exe, но не один файл!) – CLR работает со сборками • Группирует один или несколько управляемых модулей и/или файлов ресурсов • Наименьшая единица повторного использования, безопасности, версионирования • «Атом» развертывания • Самоописываемая ( «self describing» )
Характеристики сборки • Определяет повторно используемые типы • Помечена номером версии • Со сборкой может быть связана защитная информация
Манифест • Список имён файлов сборки, номер версии, экспортируемые типы • Хранится в одном выделенном файле сборки • Без манифеста прямое выполнение невозможно
Лекция 2: Сборка (assembly) • Что такое сборка • Развёртывание • Безопасность, управление версиями, политики
Версия сборки Номер версии • • • Major version number Minor version number Build number Revision number CLR считает версии с большими номерами более поздними
Региональные стандарты • Кроме номера версии, сборка характеризуется региональными стандартами (culture, а не locale ) • Culture neutral – сборка, для которой региональные стандарты не определены • Способы задать culture: AL. exe /culture: ”en-US” § [assembly: Assembly. Culture(“en-US”)] § • Не-culture neutral сборка не может содержать код
Виды развёртывания • Закрытое развёртывание – сборка доступна только одному приложению. Такое развёртывание подходит для большинства приложений • Открытое развёртывание – сборка доступна всем приложениям, но это накладывает на неё определённые ограничения
Закрытое развёртывание • Private deployment – простейший вид развёртывания • Развёртывание в одном каталоге • Лёгкость установки и удаления программ (just copy) • Сборка используется только одним приложением (поэтому «закрытое» )
Автоматическое управление версиями Раньше Сейчас В. NET проблема, похоже, решена. Такие дела. Microsoft, DLL hell Холст, масло, ? 1990 -е
Строгие и нестрогие имена • "Weakly" и strongly named assemblies • Сборки со строгими именами подписаны ключом издателя • Сборки с нестрогими именами могут быть развёрнуты только закрыто
Назначение строгого имени • Строгое имя включает в себя: o Имя o Номер версии o Culture o Маркер открытого ключа (public key token) • Сборка подписывается при компиляции (атрибут Assembly. Key. File указывает имя файла с ключами)
4 разные сборки “Cool, Version=1. 0. 10. 20, Culture=neutral, Public. Key. Token=692 fbea 5521 e 1304” “Cool, Version=1. 0. 10. 20, Culture=“en-US”, Public. Key. Token=692 fbea 5521 e 1304” “Cool, Version=2. 0. 10. 20, Culture=neutral, Public. Key. Token=692 fbea 5521 e 1304” “Cool, Version=1. 0. 10. 20, Culture=neutral, Public. Key. Token=6595 b 64144 ccf 1 df”
Открытый ключ Пример открытого ключа: 070200000024000052534132000400000100 af 08356378 c 852 c 5 d 77 a 0 b 3 b 39 e 5 c 9 c 0256 b 6 c 5 c 0 c 8 c 4676304374553 bad 4 cb 69 d 6 c 0 dbd 82294 c 9675 ca 0 aa 93 b 7 d 216 c 673165 3 c 1 a 9970 c 859 cccc 119 a 224 a 1327 d 2811196774 bc 459 bf 21235 e 5 d 6 f 722 e 94 fc 64100 ec 86 0929762 f 22265299 bd 9 df 2 d 37504 b 74 d 9 e 5 c 920 f 28 b 23 f 553 fd 705 ef 71 dc 926 a 8 d 554 b 2 bd 209 e 44 c 66 da 784523018 f 1018 c 427 ed 14 e 895 fbe 1794 c 1020 d 13 b 218 e 65622 d 763 b 655 f 3 15 a 15 cb 2 e 53 ce 050 ac 481 c 410 dd 91 c 3153 ad 8928 a 15 b 9 eed 24 e 1 e 191 e 762 d 0 fc 0 bd 3 af 86 50 c 0835597 fb 8 d 2 e 67 f 80 f 4489508 a 7531 f 36 c 1750 c 1 e 6 e 1 d 3288 d 61 a 7 eed 79 ac 24 bb 942 1 a 9152 c 72 c 6 c 5 e 130 c 41 cea 92 de 3 e 9014 c 84 d 7 cf 2242 c 4 c 84 d 514 ce 5120452 fffc 0215 df 94 d 096 be 48 cd 016 c 15 d 09 f 5 afdffa 35 db 6 e 0 f 16 e 4 b 20012 fe 052 cfe 4 ab 5400 bf 90 cf 0 af 6 ed 7 cea ca 21 a 18465 c 340 d 7 df 06137473 cf 02 aa 460517312 a 8 a 10301 c 12 bac 1 c 04539262633 b 438 2 ede 1 d 869 ced 97 f 07 dd 7 cef 9 a 0 c 3 ef 32 c 0 d 863 fa 11 bae 3 ae 6 d 46 ab 1061475 be 319 d 8 ecee 6 dee 38 ba 1693 b 964 b 703 bcc 9 ba 43 ff 83916 bc 715594 ee 347 c 6 a 0533 a 65 a 2158087415 cb 7 a d 42 f 7 a 5 a 2 d 9 b 428 bfc 47 d 3412 d 623 ddedbceac 398 fece 031351 af 65 ebf 004 abe 631 b 893 b 1 1 fb 9 f 7086704 e 8 d 1 f 3 baa 93589613 d 1 e 177 c 89 ecb 69 e 23465 aab 45631 a 41164 f 21669 e 31 01 cbae 212 c 967 d 871 d 02311 bbdd 74024 d 45 af 5 c 47 d 036 e 73 db 56972 e 3 cde 6 cc 56 e 5 f 96 fca 0 f 0 c 6 c 227 b 510 c 58 bb 27 e 38 bd 9 b 2714 a 87 cd 2 c 058 e 2 b 5 a 950 f 70 da 52 c 26 faa 4719 a 4 f 764 a 30288 a 653 fc 1 cb 7972 c 56 be 70 b 7 cba Public key token is 6 b 335 ba 9 ddae 5 b 14
Открытое развёртывание • • Сборка доступна всем Сборка должна иметь строгое имя Сборки хранятся в специальном месте Может существовать несколько версий одной и той же сборки
Глобальный кэш сборок • GAC (global assembly cache) – то самое специальное место • Обычно %Win. Dir%AssemblyGAC • Сложная структура – работать можно только с помощью специальных утилит (e. g. GACUtil) • Сборка с нестрогим именем не может попасть в GAC
Конфигурационный файл • xml-файл <имя_программы>. config (или Web. config для ASP. NET) • Удобство и простота перемещения программ вместе с политиками • Настройка дополнительных путей поиска в подкаталогах – тег probing
Конфигурационный файл Пример конфигурационного файла, расширяющего набор директорий поиска: <configuration> <runtime> <assembly. Binding xmlns=“urn: schemas-microsoft-com: asm. v 1”> <probing private. Path=“First. Path; Second. Path/Sub. Dir”/> </runtime> </configuration>
Лекция 2: Сборка (assembly) • Что такое сборка • Развёртывание • Безопасность, управление версиями, политики
Защита от изменений • При установке в GAC производится проверка • Сравниваются подписанные и фактические хеш-значения файлов • В случае несовпадения установка в GAC оканчивается неудачей • В случае закрытого развёртывания сверка хеш-значений производится при каждом запуске (по понятным причинам, только для сборок со строгим именем)
Подписание сборки • Для сборки рассчитывается некое хешзначение (алгоритм SHA-1; алгоритм можно выбрать) – 100 -200 байт • Учитывается весь текст сборки, кроме секции, в которую позже попадет зашифрованное хеш-значение • Хеш-значение шифруется закрытым ключом и записывается в заголовок CLR • Хеш-значение расшифровывается с помощью открытого ключа, записанного в манифесте сборки
Подписание сборки Cool. dll IL Метаданные Манифест Открытый ключ Хэш-значение Расчёт хеша Cool. dll Встраивание в заголовок CLR Подписание закрытым ключом Заголовок CLR Цифровая подпись RSA
Защита от изменений • При установке в GAC/запуске сравниваются фактические и подписанные хеш-значения • Также сравниваются хеш-значения для прочих файлов сборки (они хранятся в манифесте сборки) • Вы должны быть уверены, что: Закрытый ключ не скомпрометирован o Открытый ключ принадлежит надежному издателю o
Отложенное подписание • Доступ к закрытому ключу ограничен (лишь несколько человек) • Закрытый ключ может храниться в сейфе или аппаратно • Для удобства при разработке реализован механизм «отложенного подписания» (delay sign) – возможность создавать сборки со строгими именами без закрытого ключа • Удобно, но лишает возможности Sample гарантировать неизменность кода • При «выходе в свет» такую сборку можно и нужно подписать
Совместная работа сборок • Совместное исполнение – side-by-side execution • Сборка A использует сборку B ver. 1. 0 и C ver. 2. 0. • Сборка C использует сборку B ver 2. 0 • ! При исполнении A будут загружены обе версии B A C B 1. 0 B 2. 0 • ! Внимание: разделяемые ресурсы!
Политики работы с версиями • Описанные механизмы гарантируют, что все приложения будут работать с теми версиями сборок, с которыми они тестировались ? А как же новые версии общих компонент? ? А как же исправления ошибок?
Политики работы с версиями Для настройки работы с версиями существует механизм «политик» • xml-файл <имя_сборки>. config – теги binding. Redirect и code. Base – настройка версионирования для конкретной сборки • xml-файл machine. config – настройка версионирования для всего компьютера • Политики издателя – настройка издателем версионирования для своих сборок • Политики могут изменить только номер версии, но не имя/региональный стандарт/издателя
Политики работы с версиями Политика издателя – выдержка xml-файла: <configuration> // skipped <dependent. Assembly> <assembly. Identity name=“Cool” public. Key. Token=“ 692 fbea 5521 e 1304” culture=“neutral”> <binding. Redirect old. Version=“ 1. 0. 0. 0” new Version=“ 2. 0. 0. 0”/> <code. Base version=“ 2. 0. 0. 0” href=“http: //pupkin. com/cool. dll”/> </dependent. Assembly> </configuration>
Редактирование политик Не всё так запущенно – для редактирования политик можно использовать оснастку MMC . NET Framework Configuration
Восстановление сбойного приложения ? Обновления могут иметь печальные последствия Sample • CLR ведёт учёт различных конфигураций версий, используемых при запуске приложения • Есть возможность отката на одну из предыдущих конфигураций • Всё тот же инструмент. NET Framework Configuration
Следующая лекция Обзор языка C#
Assemblies.ppt 2 лекция