11.05.2013 Сборки в.NET 1 Сборки в.NET Сборки в.NET Подготовка занятия: С.В. Земляная, szemlyanaya@mail.ru Д.А. Маленко maldim@gmx.net Контроль качества:

Презентация:



Advertisements
Похожие презентации
Версия сборки Номер версии сборки имеет формат major.minor.build.revision. Например, Значения major(старший), minor(младший), build (компоновка)
Advertisements

Лекция 2 Раздел 2.1 Windows Phone Темы раздела 3.
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
Лекция 1 Раздел 1 Windows Phone Темы раздела 3 Windows Phone Устройство на платформе Windows Phone 4.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 4500 к решению Совета депутатов города Новосибирска от
Работа учащегося 7Б класса Толгского Андрея. Каждое натуральное число, больше единицы, делится, по крайней мере, на два числа: на 1 и на само себя. Если.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
ФИЛОСОФИЯ.NET Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться.
1 Диаграммы реализации (implementation diagrams).
Масштаб 1 : Приложение 1 к решению Совета депутатов города Новосибирска от
Масштаб 1 : Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Матемтааки ЕТ СТ 2 класс Шипилова Наталия Викторовна учитель начальных классов, ВКК Шипилова Наталия Викторовна учитель начальных классов, ВКК.
Лекция 3 Раздел 3,1 Windows Phone Темы раздела 3.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 6000 Приложение 7 к решению Совета депутатов города Новосибирска.
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
СборкиReflection Лекция 8. Сборки Reflection Сборки Reflection.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
ДонНУ, кафедра КТ, проф.В.К.Толстых WCF-службы Создание и тестирование.dll-библиотеки WCF-служб Из цикла лекций «Internet-технологии разработки приложений»
Результаты сбора и обработки баз данных неработающего населения муниципальных общеобразовательных учреждений города Краснодара за период с 02 по 10 февраля.

Транксрипт:

Сборки в.NET 1 Сборки в.NET Сборки в.NET Подготовка занятия: С.В. Земляная, Д.А. Маленко Контроль качества: О.В. Федоренко

Сборки в.NET 2 План лекции 1. Понятие сборки 2. Виды сборок 3. Политика версий 4. Политика безопасности 5. Развертывание приложения 6. Рефлексия типов 7. Вопросы 8. Литература к лекции

Сборки в.NET 3 Глоссарий лекции Assembly – сборка Assembly – сборка MSIL – Microsoft Intermediate Language – промежуточный язык Microsoft, который не зависит ни от платформы, ни от центрального процессора, ни от языка программирования MSIL – Microsoft Intermediate Language – промежуточный язык Microsoft, который не зависит ни от платформы, ни от центрального процессора, ни от языка программирования GAC – Global Assembly Cache – глобальный кэш сборок, место, где хранятся общие сборки GAC – Global Assembly Cache – глобальный кэш сборок, место, где хранятся общие сборки role-based security – ролевая безопасность role-based security – ролевая безопасность code access security – безопасность на уровне кода code access security – безопасность на уровне кода Binding policy – политика связывания Binding policy – политика связывания Publisher policy – политика поставщика сборки Publisher policy – политика поставщика сборки ildasm.exe – Intermediate Language Disassembler – дизассемблер промежуточного языка ildasm.exe – Intermediate Language Disassembler – дизассемблер промежуточного языка sn.exe – утилита для создания пары открытый/закрытый ключ sn.exe – утилита для создания пары открытый/закрытый ключ gacutil.exe – утилита для управления GAC gacutil.exe – утилита для управления GAC permview.exe – утилита для просмотра, какие привилегии запрошены на уровне сборке permview.exe – утилита для просмотра, какие привилегии запрошены на уровне сборке caspol.exe – утилита для настройки политик безопасности caspol.exe – утилита для настройки политик безопасности al.exe – Assembly Linker – компоновщик al.exe – Assembly Linker – компоновщик

Сборки в.NET 4 Немного истории Динамически подгружаемые библиотеки DLL придумали для реализации идеи повторного использования кода Динамически подгружаемые библиотеки DLL придумали для реализации идеи повторного использования кода В DLL вопросы поддержки версий лежат на плечах программиста В DLL вопросы поддержки версий лежат на плечах программиста В новых библиотеках DLL нужно сохранять старые функции для обеспечения совместимости В новых библиотеках DLL нужно сохранять старые функции для обеспечения совместимости Проблема с версиями COM Проблема с версиями COM Проблема развертывания приложений COM Проблема развертывания приложений COM

Сборки в.NET 5 Понятие сборки Сборка (Assembly) – это двоичный файл (DLL или EXE), который содержит в себе код на языке MSIL, метаданные, которые описывают этот код, и дополнительные ресурсы (изображения, таблицы и т.п.) Сборка (Assembly) – это двоичный файл (DLL или EXE), который содержит в себе код на языке MSIL, метаданные, которые описывают этот код, и дополнительные ресурсы (изображения, таблицы и т.п.)

Сборки в.NET 6 Программный код в сборке Сборка.NET содержит не платформенно-зависимые инструкции, а код на промежуточном языке MSIL (или просто IL) Сборка.NET содержит не платформенно-зависимые инструкции, а код на промежуточном языке MSIL (или просто IL) MSIL – Microsoft Intermediate Language – промежуточный язык Microsoft, который не зависит ни от платформы, ни от центрального процессора, ни от языка программирования MSIL – Microsoft Intermediate Language – промежуточный язык Microsoft, который не зависит ни от платформы, ни от центрального процессора, ни от языка программирования

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

Сборки в.NET 8 Понятие сборки (продолжение) Каждая сборка имеет уникальное имя, которое состоит из: Каждая сборка имеет уникальное имя, которое состоит из: префикса, основанного на открытом ключе разработчика (для общих сборок)префикса, основанного на открытом ключе разработчика (для общих сборок) простого текстового именипростого текстового имени номера версииномера версии информации о локализацииинформации о локализации Все общие сборки подписываются секретным ключом разработчика Все общие сборки подписываются секретным ключом разработчика

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

Сборки в.NET 10 Сборки изнутри Рассмотрим пример кода для выдачи на экран сообщения "Hello, World!" написанный на C# и Visual Basic.NET. Задача состоит в том, чтобы убедиться, что в результате компиляции кодов на разных языках получим одинаковый вид сборок Рассмотрим пример кода для выдачи на экран сообщения "Hello, World!" написанный на C# и Visual Basic.NET. Задача состоит в том, чтобы убедиться, что в результате компиляции кодов на разных языках получим одинаковый вид сборок Для этого в SharpDevelop создадим новый комбинированный проект: Для этого в SharpDevelop создадим новый комбинированный проект: Файл/Новый/Комбинированный проект/ C# Консольное приложение Файл/Новый/Комбинированный проект/ C# Консольное приложение На следующем слайде показан вид соответствующего диалога На следующем слайде показан вид соответствующего диалога

Сборки в.NET 11 Сборки изнутри. Диалог создания комбинированного приложения на C#

Сборки в.NET 12 Сборки изнутри. Пример на C# На экране увидим следующее: На экране увидим следующее:

Сборки в.NET 13 Сборки изнутри. Посмотрим сборку с помощью дизассемблера ILDASM Построим exe-файл Построим exe-файл Запуск/Собрать HelloWorld Запустим утилиту ildasm.exe (Intermediate Language Disassembler - дизассемблер промежуточного языка) следующим образом: Запустим утилиту ildasm.exe (Intermediate Language Disassembler - дизассемблер промежуточного языка) следующим образом: ildasm.exe /adv HelloWorld.exe

Сборки в.NET 14 Сборки изнутри. Сборка из кода на C# Получим древовидную структуру, которая показывает сборку изнутри. Получим древовидную структуру, которая показывает сборку изнутри.

Сборки в.NET 15 Сборки изнутри. То же самое на Visual Basic.NET Проделаем то же самое для кода на Visual Basic.NET Проделаем то же самое для кода на Visual Basic.NET В SharpDevelop создадим новый комбинированный проект: В SharpDevelop создадим новый комбинированный проект: Файл/Новый/Комбинированный проект/ VBNET Console Project Файл/Новый/Комбинированный проект/ VBNET Console Project Вид соответствующего диалога аналогичен рассмотренному для C# Вид соответствующего диалога аналогичен рассмотренному для C#

Сборки в.NET 16 Сборки изнутри. Пример на Visual Basic.NET

Сборки в.NET 17 Продолжаем Проделаем дизассемблирование с помощью утилиты ildasm.exe для файла HelloWorldVB.exe Проделаем дизассемблирование с помощью утилиты ildasm.exe для файла HelloWorldVB.exe Получим вид сборки, аналогичный сборке на основе кода на C# Получим вид сборки, аналогичный сборке на основе кода на C#

Сборки в.NET 18 Сборки изнутри. Сборка из кода на Visual Basic.NET

Сборки в.NET 19 Сборки изнутри. Условные обозначения СимволЗначениеАнгл.терминДоп.информация More info Пространство имен Namespace КлассClass Тип по значению Value Type ИнтерфейсInterface МетодMethod

Сборки в.NET 20 Сборки изнутри. Условные обозначения (продолжение) СимволЗначениеАнгл.термин Стат. метод Static method Поле (или член) Field Статическое поле Static Field СобытиеEvent СвойствоProperty

Сборки в.NET 21 Сборки изнутри. Содержание манифеста Приведем содержание манифеста, полученное при помощи утилиты ildasm.exe Приведем содержание манифеста, полученное при помощи утилиты ildasm.exe //Это ссылка на основную библиотеку классов.NET.assembly extern mscorlib { //Это хэш публичного ключа данной сборки //он нужен для подтверждения валидности сборки.publickeytoken = (B7 7A 5C E0 89 ) //Версия сборки, которая использовалась //при создании приложения.ver 1:0:5000:0 }

Сборки в.NET 22 Сборки изнутри. Содержание манифеста (продолжение) //Описание нашей сборки.assembly HelloWorld { // -- The following custom attribute is added automatically, do not // uncomment // -- Следующий атрибут добавлен автоматически, не убирайте // комментарий //.custom instance void // [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, // bool) = ( ) //Алгоритм, по которому считается хэш.hash algorithm 0x //Версия нашей сборки.ver 1:0:1370:40459 }

Сборки в.NET 23 Сборки изнутри. Содержание манифеста (продолжение) //Название запускаемого файла.module HelloWorld.exe // MVID: {81CFE29B-198E-4FEC-B4D7- 253B3ADC7A94} //Предпочтительный адрес для загрузки сборки.imagebase 0x //Подсистема (консоль, оконное приложение, //приложение времени загрузки).subsystem 0x //Выравнивание секций.file alignment 512 //Зарезервированный флаг.corflags 0x

Сборки в.NET 24 Сборки изнутри. Теги манифеста.assembly – помечает объявленные сборки. Наличие этого тега означает, что этот файл – сборка.NET.assembly – помечает объявленные сборки. Наличие этого тега означает, что этот файл – сборка.NET.file – помечает дополнительные теги.file – помечает дополнительные теги.class extern – помечает классы, экспортируемые этой сборкой, но объявленные в других модулях.class extern – помечает классы, экспортируемые этой сборкой, но объявленные в других модулях.exeloc – помечает местонахождение исполняемого файла сборки.exeloc – помечает местонахождение исполняемого файла сборки.mainfestres – помечает внутренние ресурсы сборки.mainfestres – помечает внутренние ресурсы сборки.module – помечает объявление модуля. Используется для файлов модулей (двоичных файлов без манифеста).module – помечает объявление модуля. Используется для файлов модулей (двоичных файлов без манифеста).module extern – помечает внешние модули, на которые есть ссылки внутри текущего модуля.module extern – помечает внешние модули, на которые есть ссылки внутри текущего модуля.assembly extern – помечает внешние сборки, необходимые для работы данной сборки.assembly extern – помечает внешние сборки, необходимые для работы данной сборки.publickey – содержит открытый ключ.publickey – содержит открытый ключ.publickeytoken – содержит маркер открытого ключа.publickeytoken – содержит маркер открытого ключа

Сборки в.NET 25 Сборки изнутри (окончание) Сборка может состоять из следующих частей: манифест, описание типов, код в виде промежуточного языка (IL) и набор ресурсов. Не все из них должны обязательно присутствовать в каждой сборке, кроме, разумеется, манифеста. Сборка также может быть разбита на несколько файлов, что позволяет обновлять отдельные файлы без перекомпиляции Сборка может состоять из следующих частей: манифест, описание типов, код в виде промежуточного языка (IL) и набор ресурсов. Не все из них должны обязательно присутствовать в каждой сборке, кроме, разумеется, манифеста. Сборка также может быть разбита на несколько файлов, что позволяет обновлять отдельные файлы без перекомпиляции

Сборки в.NET 26 Вопросы для повторения Что такое сборка? Что такое сборка? Для чего придумали сборки? Для чего придумали сборки? Для чего нужна утилита ildasm.exe? Для чего нужна утилита ildasm.exe? Чем отличается манифест от метаданных? Чем отличается манифест от метаданных? Что такое MSIL? Что такое MSIL?

Сборки в.NET 27 Виды сборок частные (private) – доступны только одному приложению частные (private) – доступны только одному приложению общие (shared) – могут использоваться всеми приложениями на данном компьютере общие (shared) – могут использоваться всеми приложениями на данном компьютере

Сборки в.NET 28 Частные сборки Частные сборки видны только самому приложению Частные сборки видны только самому приложению Нет необходимости заботится об уникальности имен во всем глобальном пространстве имен Нет необходимости заботится об уникальности имен во всем глобальном пространстве имен Не нужно делать записей в реестре при развертывании приложений Не нужно делать записей в реестре при развертывании приложений Сборки просто копируются в директорию приложения или в подчиненные директории Сборки просто копируются в директорию приложения или в подчиненные директории Общая среда исполнения (CLR) при запуске приложения прочитает его манифест и определит, какие сборки необходимы. Затем будет произведён поиск нужной сборки в директории приложения (т.е.процесс зондирования или probing) Общая среда исполнения (CLR) при запуске приложения прочитает его манифест и определит, какие сборки необходимы. Затем будет произведён поиск нужной сборки в директории приложения (т.е.процесс зондирования или probing)

Сборки в.NET 29 Общие сборки Общие сборки могут быть использованы сразу несколькими приложениями Общие сборки могут быть использованы сразу несколькими приложениями Сборка должна иметь строгое имя (strong name) Сборка должна иметь строгое имя (strong name) Сборка должна быть помещена в общедоступное место – Global Assembly Cache (GAC, глобальный кэш сборок) Сборка должна быть помещена в общедоступное место – Global Assembly Cache (GAC, глобальный кэш сборок)

Сборки в.NET 30 Именование общих сборок Строгое имя включает: Строгое имя включает: Имя файла сборкиИмя файла сборки Пара открытый/закрытый ключПара открытый/закрытый ключ Цифровую подписьЦифровую подпись Информацию о версии сборкиИнформацию о версии сборки Информацию о культуре сборки (естественный язык)Информацию о культуре сборки (естественный язык)

Сборки в.NET 31 Ключи сборки Создание строгого имени основывается на криптографии открытого ключа. Мы должны создать пару открытый/закрытый ключ Создание строгого имени основывается на криптографии открытого ключа. Мы должны создать пару открытый/закрытый ключ Эта пара будет использована компилятором, который затем поместит маркер открытого ключа в манифест сборки (пометив его тегом [.publickeytoken]) Эта пара будет использована компилятором, который затем поместит маркер открытого ключа в манифест сборки (пометив его тегом [.publickeytoken]) Закрытый ключ не помещается в манифест сборки. Он используется для создания цифровой подписи. Сам закрытый ключ будет храниться в том модуле сборки, в котором находится манифест Закрытый ключ не помещается в манифест сборки. Он используется для создания цифровой подписи. Сам закрытый ключ будет храниться в том модуле сборки, в котором находится манифест

Сборки в.NET 32 Механизм проверки идентичности внешней сборки Клиентское приложение Сборка для общего пользования (foo.dll), установленная в глобальный кэш сборок В манифесте клиента есть ссылка на внешнюю сборку для общего пользования. Маркер открытого ключа этой сборки помечен тегом [.publickeytoken].assembly extern Foo {.publickeytoken= ( …) } Манифест сборки для общего пользования содержит такой же маркер открытого ключа, помеченный тем же тегом.publickeytoken= ( …)

Сборки в.NET 33 Подпись сборок С помощью утилиты sn.exe создается пара открытый/закрытый ключ С помощью утилиты sn.exe создается пара открытый/закрытый ключ sn -k sgKey.snk Подписать сборку можно тремя способами: Подписать сборку можно тремя способами: указать атрибут сборки (передать имя файла, содержащего пару ключей) в файле AssemblyInfo.csуказать атрибут сборки (передать имя файла, содержащего пару ключей) в файле AssemblyInfo.cs[assembly:AssemblyKeyFile("sgKey.snk")] использовать компоновщик al.exeиспользовать компоновщик al.exe al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk использовать утилиту sn.exeиспользовать утилиту sn.exe sn –R myAssembly.dll sgKey.snk

Сборки в.NET 34 Отложенная подпись сборок Не всегда разработчик имеет доступ к закрытому ключу для подписи сборки. Тогда в процессе разработки используется неподписанная сборка Не всегда разработчик имеет доступ к закрытому ключу для подписи сборки. Тогда в процессе разработки используется неподписанная сборка у такой сборки нет строгого имениу такой сборки нет строгого имени Перед распространением сборка подписывается уполномоченными лицами Перед распространением сборка подписывается уполномоченными лицами сборка получает строгое имясборка получает строгое имя

Сборки в.NET 35 Как это сделать? Получить открытую часть ключа Получить открытую часть ключа Зарезервировать место для подписи и включить открытый ключ (для использования другими сборками) Зарезервировать место для подписи и включить открытый ключ (для использования другими сборками) [assembly:AssemblyKeyFileAttribute("sgKey.snk ")] [assembly:AssemblyDelaySignAttribute(true)] Отключить верификацию для сборки Отключить верификацию для сборки sn –Vr myAssembly.dll Перед распространением подписать сборку Перед распространением подписать сборку sn –R myAssembly.dll sgKey.snk

Сборки в.NET 36 Культура сборок Сборка может поддерживать какую-либо культуру или язык Сборка может поддерживать какую-либо культуру или язык Культура – способ представления информации Культура – способ представления информации ДатыДаты у нас – у нас – у них – 10/09/2003 у них – 10/09/2003 Форматирование чисел, денежные единицы и т.п.Форматирование чисел, денежные единицы и т.п. Язык – естественный язык, на котором сборка выводит сообщения Язык – естественный язык, на котором сборка выводит сообщения

Сборки в.NET 37 Сопровождающая сборка (satellite assembly) Сборка, которая содержит ресурсы специфичные для культуры или языка Сборка, которая содержит ресурсы специфичные для культуры или языка Сборки, которые имеют культуру отличную от neutral, автоматически считаются сопровождающими Сборки, которые имеют культуру отличную от neutral, автоматически считаются сопровождающими Сборка может иметь произвольное число сопровождающих сборок Сборка может иметь произвольное число сопровождающих сборок

Сборки в.NET 38 Использование информации о культуре При загрузке сборки CLR пытается загрузить версию, которая в наибольшей мере соответствует текущим установкам При загрузке сборки CLR пытается загрузить версию, которая в наибольшей мере соответствует текущим установкам default (fallback) default (fallback) frfr fr-FR fr-FR fr-CA fr-CA Для Франции будет загружена сборка с культурой «fr-FR», для Канады – «fr- CA», для других франко-говорящих стран – «fr», для остальных – default (обычно – «en-EN») Для Франции будет загружена сборка с культурой «fr-FR», для Канады – «fr- CA», для других франко-говорящих стран – «fr», для остальных – default (обычно – «en-EN»)

Сборки в.NET 39 Глобальный кэш сборок GAC Местонахождение GAC: %windir%\assembly Местонахождение GAC: %windir%\assembly Если просматривать этот каталог при помощи проводника, то получим что- нибудь похожее на рисунок Если просматривать этот каталог при помощи проводника, то получим что- нибудь похожее на рисунок

Сборки в.NET 40 Cборки в GAC? Разные приложения будут иметь доступ к этой сборке Разные приложения будут иметь доступ к этой сборке Только системный администратор (обладатель прав администратора) может управлять сборками в GAC Только системный администратор (обладатель прав администратора) может управлять сборками в GAC Информация о сборке всегда верифицируется (проверяется ключ) Информация о сборке всегда верифицируется (проверяется ключ) В GAC нужно помещать сборки только тогда, когда это действительно необходимо В GAC нужно помещать сборки только тогда, когда это действительно необходимо

Сборки в.NET 41 Как поместить сборку в GAC? При помощи приложения- установщика (setup) При помощи приложения- установщика (setup) Можно создать при помощи Visual Studio.NETМожно создать при помощи Visual Studio.NET Вручную, при помощи утилиты gacutil.exe Вручную, при помощи утилиты gacutil.exe Перетащив сборку в GAC при помощи Windows Explorer (автоматически запускается специальное расширение Windows Shell Extension) Перетащив сборку в GAC при помощи Windows Explorer (автоматически запускается специальное расширение Windows Shell Extension)

Сборки в.NET 42 Управление GAC С помощью утилиты gacutil.exe С помощью утилиты gacutil.exe Просмотр содержимого GACПросмотр содержимого GAC Установка/удаление сборокУстановка/удаление сборок В проводнике с использованием возможностей Windows Shell Extension В проводнике с использованием возможностей Windows Shell Extension Просмотр свойств сборок (нажать правую кнопку мыши, из контекстного меню выбрать пункт Properties)Просмотр свойств сборок (нажать правую кнопку мыши, из контекстного меню выбрать пункт Properties) Установка/удаление сборокУстановка/удаление сборок

Сборки в.NET 43 Управление GAC с помощью gacutil.exe Просмотр содержимого GAC Просмотр содержимого GAC gacutil /lgacutil /l Установка сборки Установка сборки gacutil /i mydll.dllgacutil /i mydll.dll Дополнительные свойстваДополнительные свойства /r – подсчет ссылок Удаление сборки Удаление сборки gacutil /u mydllgacutil /u mydll

Сборки в.NET 44 Просмотр свойств общей сборки в проводнике

Сборки в.NET 45 Вопросы для повторения Чем отличается частная сборка от общей? Чем отличается частная сборка от общей? Где хранятся сборки? Где хранятся сборки? Что такое GAC? Что такое GAC? Для чего нужна утилита gacutil.exe? Для чего нужна утилита gacutil.exe? Что такое Windows Shell Extension? Что такое Windows Shell Extension? Как можно подписать общие сборки? Как можно подписать общие сборки?

Сборки в.NET 46 Атрибуты уровня сборки Любая интегрированная среда автоматически создает файл AssemblyInfo.cs – место размещения множества атрибутов уровня сборки. Любая интегрированная среда автоматически создает файл AssemblyInfo.cs – место размещения множества атрибутов уровня сборки. Пример содержимого файла: Пример содержимого файла: [assembly: AssemblyTitle(MyAssembly")] [assembly: AssemblyDescription(Shared Component")] [assembly: AssemblyCompany(Me Ltd.")] [assembly: AssemblyProduct(Vega")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture(en-EN")] [assembly: AssemblyVersion(" ")]

Сборки в.NET 47 Некоторые атрибуты уровня сборки AssemblyTitleAttribute Информация о названии сборки AssemblyCompanyAttribute Информация о компании AssemblyCopyrightAttribute Информация о правах на сборку AssemblyCultureAttribute Информация о естественном языке сборки AssemblyKeyFileAttribute Информация об имени файла с парой открытый/закрытый ключ, использованной для создания цифровой подписи сборки AssemblyVersionAttribute Определяет номер версии сборки AssemblyOperationSystemAttri bute Информация об операционной системе, для работы в которой предназначена данная сборка

Сборки в.NET 48 Политика версий Политика версий используется только для общих сборок Политика версий используется только для общих сборок Номер версии состоит из четырех чисел: Номер версии состоит из четырех чисел: Major – основная версияMajor – основная версия Minor – подверсия приложенияMinor – подверсия приложения Build – количество полных компиляций для данной версииBuild – количество полных компиляций для данной версии Revision – номер ревизии для текущей компиляцииRevision – номер ревизии для текущей компиляции Например, Например, Если при поиске нужной сборки найдено несколько сборок с одинаковыми основными частями, то будет выбрана сборка с наибольшей дополнительной частью Если при поиске нужной сборки найдено несколько сборок с одинаковыми основными частями, то будет выбрана сборка с наибольшей дополнительной частью

Сборки в.NET 49 Запись информации о версии Версию сборки можно задать двумя способами: Версию сборки можно задать двумя способами: при помощи атрибутапри помощи атрибута System.Reflection.AssemblyVersionAttribute System.Reflection.AssemblyVersionAttribute в файле AssemblyInfo.cs, используя атрибут AssemblyVersion. Например,в файле AssemblyInfo.cs, используя атрибут AssemblyVersion. Например, [assembly: AssemblyVersion( )] [assembly: AssemblyVersion( )] Версию можно задавать не полностью. При отсутствии каких либо частей компилятор допишет их сам по следующим правилам: Версию можно задавать не полностью. При отсутствии каких либо частей компилятор допишет их сам по следующим правилам: Minor – приравнивается к нулюMinor – приравнивается к нулю Build – приравнивается количеству дней прошедших с первого января 2000 годаBuild – приравнивается количеству дней прошедших с первого января 2000 года Revision – приравнивается количеству секунд, прошедших с полуночи, деленных на два.Revision – приравнивается количеству секунд, прошедших с полуночи, деленных на два.

Сборки в.NET 50 Работа с разными версиями сборки 1. Создадим библиотеку SharedAssembly.dll Файл/Новый комбинированный проект/C# Library 2. Содержимое файла SharedVer.cs using System; using System; using System.Windows.Forms; using System.Windows.Forms; namespace SharedAssembly namespace SharedAssembly { public class VersionMessage { public class VersionMessage { public VersionMessage() { public VersionMessage() { MessageBox.Show("Using version !", "Version Info");} { MessageBox.Show("Using version !", "Version Info");} } } } } Содержимое файла AssemblyInfo.cs Содержимое файла AssemblyInfo.cs [assembly: AssemblyVersion( ")] [assembly: AssemblyVersion( ")] [assembly: AssemblyDelaySign(false)] [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("theKey.snk")] [assembly: AssemblyKeyFile("theKey.snk")] [assembly: AssemblyKeyName("")] [assembly: AssemblyKeyName("")] 3. Создадим пару открытый/закрытый ключ, который поместим в файл theKey.snk 4. Соберем проект. 5. Перетащим с помощью проводника появившийся файл SharedAssembly.dll в GAC.

Сборки в.NET 51 Работа с разными версиями сборки (продолжение) 1. Создадим новую библиотеку SharedAssembly.dll в другом каталоге 2. Содержимое файла SharedVer.cs using System; using System; using System.Windows.Forms; using System.Windows.Forms; namespace SharedAssembly namespace SharedAssembly { public class VersionMessage { public class VersionMessage { public VersionMessage() { public VersionMessage() { MessageBox.Show("Using version !", "Version Info"); } { MessageBox.Show("Using version !", "Version Info"); } } } } } Содержимое файла AssemblyInfo.cs Содержимое файла AssemblyInfo.cs [assembly: AssemblyVersion(" ")] [assembly: AssemblyVersion(" ")] [assembly: AssemblyDelaySign(false)] [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("theKey.snk")] [assembly: AssemblyKeyFile("theKey.snk")] [assembly: AssemblyKeyName("")] [assembly: AssemblyKeyName("")] 3. Используем ту же пару открытый/закрытый ключ из файла theKey.snk 4. Соберем проект 5. Перетащим с помощью проводника появившийся файл SharedAssembly.dll в GAC

Сборки в.NET 52 В GAС будут одновременно находиться две версии сборки

Сборки в.NET 53 Пример работы с разными версиями сборки Для демонстрации создадим новый комбинированный проект (C# Windows Form проект) SharedAssemblyUser Для демонстрации создадим новый комбинированный проект (C# Windows Form проект) SharedAssemblyUser Содержимое файла AsmUser.cs Содержимое файла AsmUser.cs namespace SharedLibUser namespace SharedLibUser { using System; { using System; using SharedAssembly; using SharedAssembly; public class SharedAsmUser public class SharedAsmUser { public static int Main(string[] args) { public static int Main(string[] args) { try { try {VersionMessage v = new VersionMessage();} {VersionMessage v = new VersionMessage();} catch(TypeLoadException e) catch(TypeLoadException e) {// Can't find assembly in GAC! {// Can't find assembly in GAC! Console.WriteLine(e.Message);} Console.WriteLine(e.Message);} return 0; return 0; } } } } } }

Сборки в.NET 54 Пример работы с разными версиями (продолжение) Перед компиляцией включим в проект ссылку на сборку SharedAssembly из GAC (например, ссылку на версию ) Перед компиляцией включим в проект ссылку на сборку SharedAssembly из GAC (например, ссылку на версию ) В результате запуска приложения мы увидим, что вызывается конструктор той версии SharedAssembly.dll, с которой связана наша сборка В результате запуска приложения мы увидим, что вызывается конструктор той версии SharedAssembly.dll, с которой связана наша сборка Можем заставить принудительно использовать нужную версию сборки. Для этого используется файл конфигурации.exe.config теги и Можем заставить принудительно использовать нужную версию сборки. Для этого используется файл конфигурации.exe.config теги и

Сборки в.NET 55 Пример работы с разными версиями (окончание) Для нашего приложения создадим файл конфигурации следующего содержания : Для нашего приложения создадим файл конфигурации следующего содержания :SharedAssemblyUser.exe.config В результате увидим, что вызывается конструктор SharedAssembly.dll версии В результате увидим, что вызывается конструктор SharedAssembly.dll версии

Сборки в.NET 56 Технология прямого запуска (Side-By-Side Execution) Для одного и того же приложения могут быть загружены разные версии одной и той же сборки. При этом приложение ничего не будет знать об этом Для одного и того же приложения могут быть загружены разные версии одной и той же сборки. При этом приложение ничего не будет знать об этом

Сборки в.NET 57 Проверка подлинности А как узнать, что это действительно именно та сборка, которая нам нужна, а не другая? А как узнать, что это действительно именно та сборка, которая нам нужна, а не другая? COM не предусматривал решения этой проблемыCOM не предусматривал решения этой проблемы В.NET для решения данного вопроса используются односторонние хэш-функции, или контрольные суммыВ.NET для решения данного вопроса используются односторонние хэш-функции, или контрольные суммы В дополнение к информации об используемой сборке во время компиляции считается контрольная сумма используемой сборки и помещается вместе с информацией о версииВ дополнение к информации об используемой сборке во время компиляции считается контрольная сумма используемой сборки и помещается вместе с информацией о версии Во время загрузки проверяется контрольная сумма, и на основании этой проверки принимается решение о валидности сборки. По умолчанию используется хэш-функция SHA1Во время загрузки проверяется контрольная сумма, и на основании этой проверки принимается решение о валидности сборки. По умолчанию используется хэш-функция SHA1 Еще используется технология подписывания (signing) сборок, основанная на открытых криптографических алгоритмах с парными ключамиЕще используется технология подписывания (signing) сборок, основанная на открытых криптографических алгоритмах с парными ключами

Сборки в.NET 58 Файлы конфигурации Бывают файлы конфигурации следующих типов: Бывают файлы конфигурации следующих типов: файлы конфигурации приложенияфайлы конфигурации приложения администраторские файлы конфигурацииадминистраторские файлы конфигурации Каждый файл конфигурации приложения относится только к одному приложению. Такие файлы называются по имени приложения с расширением config, например, myAssembly.exe.config Каждый файл конфигурации приложения относится только к одному приложению. Такие файлы называются по имени приложения с расширением config, например, myAssembly.exe.config Администраторский файл конфигурации единый для всего компьютера и установленных на нем приложений. Этот файл называется machine.config Администраторский файл конфигурации единый для всего компьютера и установленных на нем приложений. Этот файл называется machine.config Файлы конфигурации – это обычные текстовые файлы в формате XML Файлы конфигурации – это обычные текстовые файлы в формате XML

Сборки в.NET 59 Вопросы для повторения Как записывается номер версии? Как записывается номер версии? Как заставить приложение использовать нужную версию сборки? Как заставить приложение использовать нужную версию сборки? Для чего нужны файлы конфигурации и какие они бывают? Для чего нужны файлы конфигурации и какие они бывают?

Сборки в.NET 60 Безопасность (security) Ролевая безопасность (role-based security) Ролевая безопасность (role-based security) Определяет права на основе роли пользователя, который запустил приложениеОпределяет права на основе роли пользователя, который запустил приложение Безопасность на уровне кода (code access security) Безопасность на уровне кода (code access security) Определяет права кода на использование различных ресурсовОпределяет права кода на использование различных ресурсов

Сборки в.NET 61 Реализация безопасности Императивная проверка безопасности Императивная проверка безопасности Во время работы программы выполняется проверка принадлежности пользователя к необходимой роли или доступа к нужному ресурсуВо время работы программы выполняется проверка принадлежности пользователя к необходимой роли или доступа к нужному ресурсу Декларативная проверка безопасности Декларативная проверка безопасности Перед загрузкой сборки выполняется проверка наличия у вызывающего кода всех необходимых привилегий, которые декларировала сборкаПеред загрузкой сборки выполняется проверка наличия у вызывающего кода всех необходимых привилегий, которые декларировала сборка

Сборки в.NET 62 Императивная проверка public static void ReadData() { FileIOPermission f = new FileIOPermission( FileIOPermissionAccess.Read, "C:\\test.dat"); FileIOPermission f = new FileIOPermission( FileIOPermissionAccess.Read, "C:\\test.dat"); // Потребовать наличия доступа на чтение файла // Потребовать наличия доступа на чтение файла // C:\test.dat // C:\test.dat f.Demand(); f.Demand(); // Чтение данных // Чтение данных......}

Сборки в.NET 63 Требования к правам кода Требования к правам кода определяются с помощью класса System.Security.CodeAccessPermission Требования к правам кода определяются с помощью класса System.Security.CodeAccessPermission Возможные действия (методы класса): Возможные действия (методы класса): Demand – потребовать наличия привилегии у всех вызвавших методов выше по стекуDemand – потребовать наличия привилегии у всех вызвавших методов выше по стеку Assert – проверить наличие доступа у этого методаAssert – проверить наличие доступа у этого метода Deny – отказать данному методу в доступеDeny – отказать данному методу в доступе PermitOnly – разрешить доступ только к одному ресурсуPermitOnly – разрешить доступ только к одному ресурсу

Сборки в.NET 64 Декларативная проверка Чтобы метод MakeLog() имел доступ к файлу C:\Log.txt, напишем следующие строки: Чтобы метод MakeLog() имел доступ к файлу C:\Log.txt, напишем следующие строки:[FileIOPermission(SecurityAction.Assert, All All public void MakeLog() { StreamWriter TextStream = new StreamWriter TextStream = new TextStream.WriteLine("This Log was created on {0}", DateTime.Now); TextStream.WriteLine("This Log was created on {0}", DateTime.Now); TextStream.Close(); TextStream.Close();}

Сборки в.NET 65 Запрос привилегий на уровне сборки Сборка может запросить ресурсы Сборка может запросить ресурсы Если доступ к ресурсам запрещен, сборка не будет загружена Если доступ к ресурсам запрещен, сборка не будет загружена Запросы: Запросы: RequestMinimum – запрос ресурсов, необходимых для выполненияRequestMinimum – запрос ресурсов, необходимых для выполнения RequestOptional – запрос дополнительных ресурсовRequestOptional – запрос дополнительных ресурсов RequestRefuse – запрос на отказ в доступе к ресурсамRequestRefuse – запрос на отказ в доступе к ресурсам [assembly: FileIOPermission(SecurityAction.RequestRefuse)] [assembly: FileIOPermission(SecurityAction.RequestRefuse)]

Сборки в.NET 66 Проверка требований к безопасности С помощью утилиты permview.exe можно просмотреть, какие привилегии запрошены на уровне сборки С помощью утилиты permview.exe можно просмотреть, какие привилегии запрошены на уровне сборки Запустим утилиту для сборки test.exe, для которой запрошен отказ в доступе к ресурсам: Запустим утилиту для сборки test.exe, для которой запрошен отказ в доступе к ресурсам: permview test.exe Результат : Результат : minimal permission set: Not specified Not specified optional permission set: Not specified Not specified refused permission set:

Сборки в.NET 67 Управление безопасностью CLR принимает решения на основе свидетельств (evidence) безопасности сборки CLR принимает решения на основе свидетельств (evidence) безопасности сборки Свидетельства: Свидетельства: Каталог, откуда загружается сборкаКаталог, откуда загружается сборка Издатель сборкиИздатель сборки Сайт происхождения сборкиСайт происхождения сборки URL происхождения сборкиURL происхождения сборки Зона происхождения сборкиЗона происхождения сборки

Сборки в.NET 68 Как это работает? При загрузке сборки CLR получает свидетельства ее безопасности и на их основе дает права загружаемому коду При загрузке сборки CLR получает свидетельства ее безопасности и на их основе дает права загружаемому коду Например, если запускать одно и то же приложение Например, если запускать одно и то же приложение Из локального каталога – запускаетсяИз локального каталога – запускается Из подключенного сетевого диска – нетИз подключенного сетевого диска – нет

Сборки в.NET 69 Управление политикой безопасности кода Уровни политик безопасности: Уровни политик безопасности: User – для конкретного пользователя на компьютереUser – для конкретного пользователя на компьютере Machine – для всех пользователей на данном компьютереMachine – для всех пользователей на данном компьютере Enterprise – для всей сети (домена)Enterprise – для всей сети (домена) Настройка политик безопасности осуществляется двумя способами: Настройка политик безопасности осуществляется двумя способами: с помощью утилиты caspol.exeс помощью утилиты caspol.exe caspol -chggroup zone Internet -exclusive on с использованием графического интерфейса Microsoft.NET Framework 1.1 Wizards (находится в Панели управления)с использованием графического интерфейса Microsoft.NET Framework 1.1 Wizards (находится в Панели управления)

Сборки в.NET 70 Вызов Microsoft.NET Framework 1.1 Wizards в WindowsXP

Сборки в.NET 71 Сборки в программе Элементы внутри сборки находятся в более тесной связи, чем элементы в разных сборках Элементы внутри сборки находятся в более тесной связи, чем элементы в разных сборках Модификаторы доступа на уровне сборки: Модификаторы доступа на уровне сборки: internal – класс, свойство или метод доступен только внутри сборкиinternal – класс, свойство или метод доступен только внутри сборки protected internal – метод или свойство доступен либо внутри сборки, либо классам-наследникамprotected internal – метод или свойство доступен либо внутри сборки, либо классам-наследникам

Сборки в.NET 72 Вопросы для повторения Чем отличается ролевая безопасность от безопасности на уровне кода? Чем отличается ролевая безопасность от безопасности на уровне кода? Как реализуется безопасность? Как реализуется безопасность? Какие есть свидетельства безопасности? Какие есть свидетельства безопасности? Какие Вы знаете инструменты для настройки политики безопасности? Какие Вы знаете инструменты для настройки политики безопасности?

Сборки в.NET 73 Развертывание.NET-приложения. Первый способ Существует два варианта развертывания приложения: Существует два варианта развертывания приложения: 1.Развертывание приложения с использованием утилиты XCOPY Поскольку все запросы обрабатываются сначала в приватной директории приложения, то для запуска приложения необходимо просто скопировать файлы приложения на диск. Никакой регистрации не требуется. Такой сценарий применим для Web- приложений, Web-сервисов и клиентских приложенийПоскольку все запросы обрабатываются сначала в приватной директории приложения, то для запуска приложения необходимо просто скопировать файлы приложения на диск. Никакой регистрации не требуется. Такой сценарий применим для Web- приложений, Web-сервисов и клиентских приложений

Сборки в.NET 74 Развертывание.NET-приложения. Второй способ 2.Развертывание приложения с использованием Windows Installer Этот вариант применяется, если приложение состоит из небольшой части приватного кода и использует большое количество общих сборок, или когда приложение не всегда полностью установлено локальноЭтот вариант применяется, если приложение состоит из небольшой части приватного кода и использует большое количество общих сборок, или когда приложение не всегда полностью установлено локально Предусмотрены сервисы для скачивания кода и интеграции с Windows Installer. Скачивание кода предоставляет ряд преимуществ: поддержка скачивания по частям, безопасность доступа кода (без Authenticode), изоляция приложенийПредусмотрены сервисы для скачивания кода и интеграции с Windows Installer. Скачивание кода предоставляет ряд преимуществ: поддержка скачивания по частям, безопасность доступа кода (без Authenticode), изоляция приложений

Сборки в.NET 75 Связывание сборок Приложение всегда пытается использовать ту сборку, с которой оно связано Приложение всегда пытается использовать ту сборку, с которой оно связано Производитель сборки может предоставить новую версию, которая должна быть использована вместо старой Производитель сборки может предоставить новую версию, которая должна быть использована вместо старой

Сборки в.NET 76 Политика связывания (Binding policy) С помощью.NET Configuration Wizadrs можно установить политику связывания для отдельного приложения или сборки С помощью.NET Configuration Wizadrs можно установить политику связывания для отдельного приложения или сборки Уровни связывания Уровни связывания Уровень приложения – политика конкретного приложенияУровень приложения – политика конкретного приложения Уровень поставщика – политика, установленная распространителем сборкиУровень поставщика – политика, установленная распространителем сборки Уровень администратора – политика для всех связыванийУровень администратора – политика для всех связываний

Сборки в.NET 77 Политика поставщика сборки (Publisher policy) Поставщик сборки может предоставить новую версию сборки, которая должна использоваться вместо старой Поставщик сборки может предоставить новую версию сборки, которая должна использоваться вместо старой Вместе со сборкой поставляется файл политики поставщика (publisher policy file) Вместе со сборкой поставляется файл политики поставщика (publisher policy file)

Сборки в.NET 78 Файл политики поставщика (Publisher policy file) Пример содержимого файла myAssembly.dll.config: Пример содержимого файла myAssembly.dll.config:

Сборки в.NET 79 Создание сборки с политикой поставщика (Publisher policy assembly) Создать сборку с политикой поставщика можно с помощью утилиты al.exe. al /link:myAssembly.config /out:policy.1.0.myAssembly.dll /keyfile:sgKey.snk Создать сборку с политикой поставщика можно с помощью утилиты al.exe. al /link:myAssembly.config /out:policy.1.0.myAssembly.dll /keyfile:sgKey.snk В сборку помещается файл конфигурации myAssembly.configВ сборку помещается файл конфигурации myAssembly.config Установить сборку с политикой поставщика в GAC Установить сборку с политикой поставщика в GAC gacutil /i policy.1.0.myAssembly.dllgacutil /i policy.1.0.myAssembly.dll

Сборки в.NET 80 Рефлексия типов Рефлексия – это процесс обнаружения типов во время работы программы. Используя рефлексию, можем во время выполнения загрузить сборку и получить о ней ту же информацию, которую показывает утилита ILDasm.exe Рефлексия – это процесс обнаружения типов во время работы программы. Используя рефлексию, можем во время выполнения загрузить сборку и получить о ней ту же информацию, которую показывает утилита ILDasm.exe Главные элементы, которые необходимы для использования рефлексии: Главные элементы, которые необходимы для использования рефлексии: класс Type из пространства имен Systemкласс Type из пространства имен System типы из пространства имен System.Reflectionтипы из пространства имен System.Reflection

Сборки в.NET 81 Рефлексия типов. Класс Type Этот класс содержит методы для получения информации о типах программы Этот класс содержит методы для получения информации о типах программы Наиболее важные члены класса Type: Наиболее важные члены класса Type: IsAbstract, IsArray, IsClass, IsEnum, IsInterface, Isprimitive и т.д. Эти свойства позволяют определить основные характеристики конкретного типа в программе GetConstuctors(), GetEvents(), GetFields(), GetInterfaces(), GetMethods(), GetMembers(), GetProperties() Эти методы возвращают массив с набором интересующих пользователя элементов (конструкторы, события, поля и т.п.). Каждый метод возвращает массив соответствующего типа (FieldInfo, MethodInfo и т.п.). Для каждого метода есть соответствующий парный метод для работы только с одним элементом FindMembers() Возвращает массив типов MemberInfo, основываясь на заданных критериях поиска GetType() Возвращает объект типа Type по строковому имени InvokeMember() Используется для позднего связывания указанного элемента

Сборки в.NET 82 Вопросы для повторения Какие бывают политики связывания? Какие бывают политики связывания? Как создать сборку с политикой поставщика? Как создать сборку с политикой поставщика? Что такое рефлексия? Что такое рефлексия? Что такое развертывание приложения? Что такое развертывание приложения? Назовите два способа развертывания. Назовите два способа развертывания.

Сборки в.NET 83 Возможности класса Type. Проект TheType Создадим новый консольный комбинированный проект TheType, в котором будут два файла: Foo.cs и FooReader.cs. Создадим новый консольный комбинированный проект TheType, в котором будут два файла: Foo.cs и FooReader.cs. Содержимое файла Foo.cs Содержимое файла Foo.cs namespace TheType namespace TheType { public interface IFaceOne { public interface IFaceOne { void MethodA();} { void MethodA();} public interface IFaceTwo public interface IFaceTwo { void MethodB();} { void MethodB();} public class Foo: IFaceOne, IFaceTwo public class Foo: IFaceOne, IFaceTwo { // поля { // поля public int myIntField; public int myIntField; public string myStringField; public string myStringField; // метод // метод public void myMethod(int p1, string p2) public void myMethod(int p1, string p2) { } { }

Сборки в.NET 84 Возможности класса Type. Проект TheType (продолжение) Продолжение кода из файла Foo.cs Продолжение кода из файла Foo.cs // свойство // свойство public int MyProp public int MyProp { get { return myIntField; } get { return myIntField; } set { myIntField = value; } set { myIntField = value; } } // Два интерфейса // Два интерфейса public void MethodA() {} public void MethodA() {} public void MethodB() {} public void MethodB() {} } }

Сборки в.NET 85 Возможности класса Type. Проект TheType (продолжение) Содержимое файла FooReader.cs Содержимое файла FooReader.cs namespace TheType namespace TheType { using System; { using System; using System.Reflection; using System.Reflection; public class FooReader public class FooReader { public static void ListMethods(Foo f) { public static void ListMethods(Foo f) { Console.WriteLine("***** Methods of Foo *****"); { Console.WriteLine("***** Methods of Foo *****"); Type t = f.GetType(); Type t = f.GetType(); MethodInfo[] mi = t.GetMethods(); MethodInfo[] mi = t.GetMethods(); foreach(MethodInfo m in mi) foreach(MethodInfo m in mi) Console.WriteLine("Method: {0}", m.Name); Console.WriteLine("Method: {0}", m.Name); Console.WriteLine("*************************"); } Console.WriteLine("*************************"); } public static void ListFields(Foo f) public static void ListFields(Foo f) { Console.WriteLine("***** Fields of Foo *****"); { Console.WriteLine("***** Fields of Foo *****"); Type t = f.GetType(); Type t = f.GetType(); FieldInfo[] fi = t.GetFields(); FieldInfo[] fi = t.GetFields();

Сборки в.NET 86 Возможности класса Type. Проект TheType (продолжение) Продолжение кода из файла FooReader.cs Продолжение кода из файла FooReader.cs foreach(FieldInfo field in fi) foreach(FieldInfo field in fi) Console.WriteLine("Field: {0}", field.Name); Console.WriteLine("Field: {0}", field.Name); Console.WriteLine("*************************"); } Console.WriteLine("*************************"); } public static void ListProps(Foo f) public static void ListProps(Foo f) {Console.WriteLine("***** Properties of Foo *****"); {Console.WriteLine("***** Properties of Foo *****"); Type t = f.GetType(); Type t = f.GetType(); PropertyInfo[] pi = t.GetProperties(); PropertyInfo[] pi = t.GetProperties(); foreach(PropertyInfo prop in pi) foreach(PropertyInfo prop in pi) Console.WriteLine("Prop: {0}", prop.Name); Console.WriteLine("Prop: {0}", prop.Name); Console.WriteLine("*****************************"); } Console.WriteLine("*****************************"); }

Сборки в.NET 87 Возможности класса Type. Проект TheType (продолжение) Продолжение кода из файла FooReader.cs Продолжение кода из файла FooReader.cs public static void ListInterfaces(Foo f) public static void ListInterfaces(Foo f) { Console.WriteLine("***** Interfaces of Foo *****"); { Console.WriteLine("***** Interfaces of Foo *****"); Type t = f.GetType(); Type t = f.GetType(); Type[] ifaces = t.GetInterfaces(); Type[] ifaces = t.GetInterfaces(); foreach(Type i in ifaces) foreach(Type i in ifaces) Console.WriteLine("Interface: {0}", i.Name); Console.WriteLine("Interface: {0}", i.Name); Console.WriteLine("*****************************"); } Console.WriteLine("*****************************"); } public static int Main(string[] args) public static int Main(string[] args) { //Создадим объект типа Foo { //Создадим объект типа Foo Foo theFoo = new Foo(); Foo theFoo = new Foo(); // тесты // тесты ListMethods(theFoo); ListMethods(theFoo); ListFields(theFoo); ListFields(theFoo); ListProps(theFoo); ListProps(theFoo); ListInterfaces(theFoo); ListInterfaces(theFoo); return 0; } } } return 0; } } }

Сборки в.NET 88 Возможности класса Type. Проект TheType (окончание) После запуска приложения увидим характе- ристики класса Foo нашей сборки После запуска приложения увидим характе- ристики класса Foo нашей сборки

Сборки в.NET 89 Типы пространства имен System.Reflection Assembly Этот класс содержит методы для загрузки и изучения сборки AssemblyName Информация об идентификации сборки (версия, естественный язык и т.д.) EventInfo Хранит информацию о событии FieldInfo Хранит информацию о поле MemberInfo Абстрактный базовый класс, определяющий общие члены для EventInfo, FieldInfo, MethodInfo, PropertyInfo MethodInfo Хранит информацию о методе Module Позволяет обратиться к модулю в многофайловой сборке ParameterInfo Хранит информацию о параметре PropertyInfo Хранит информацию о свойстве

Сборки в.NET 90 Вопросы 1. Что такое сборка? 2. Что такое MSIL? 3. Для чего предназначена утилита ildasm.exe, и как ею пользоваться? 4. Что представляет собой сборка изнутри? 5. Чем отличаются частные и общие сборки? 6. Как сделать сборку общей? 7. Что такое ключи сборки? 8. Как можно подписать сборку, и для чего это нужно? 9. Как обеспечивается работа разных версий сборки? 10. Какие существуют возможности управления безопасностью сборки? 11. Какие существуют варианты развертывания.NET приложения? 12. Что такое рефлексия типов?

Сборки в.NET 91 Литература к лекции 1. Эндрю Троелсен. C# и платформа.NET. Библиотека программиста. – СПб.: Питер, – 800 с. 2. А.Терехов. Слайды к курсу «Платформа Microsoft.NET» /asp.net/asm.htm 02/asp.net/asm.htm 02/asp.net/asm.htm