
ExpC_Module 17Ru_1.ppt
- Количество слайдов: 47
Модуль 17 Сборки
Обзор модуля В этом модуле вы изучите n Сборки n Приватные или разделяемые сборки n Отражение (Reflection) Изучение C#/ Модуль 17/ 2 из 47
Занятие 1 - Сборки На первом занятии, Сборки, вы изучите: n Определение динамически подключаемых библиотек (Dynamic Link Libraries, DLL) и их недостатков. n Определение и описание сборок. n Описание создания сборок с помощью ресурсных файлов. n Различия между пространствами имен и сборками. Изучение C#/ Модуль 17/ 3 из 47
Динамически подключаемая библиотека (DLL) n n Это библиотека, содержащая код, который может использоваться несколькими программами одновременно. Некоторые преимущества использования DLL в программе: n n n DLL используют меньше ресурсов. DLL помогают в создании модульных программ. DLL легче переносить и устанавливать. Изучение C#/ Модуль 17/ 4 из 47
Недостатки DLL Версионностьпреимуществ, имеют множество DLL, помимо n ограничений, может установить новую версию Приложение при попытках нескольких приложений разделить однунесовместимую с разделяемого компонента, общую DLL. версией, уже установленной на машине. n "Ад DLL" (DLL Hell) - это фраза для отражения сложностей, возникающих Размещение и установка при работе с динамически подключаемыми библиотеками. n Во время установки приложения, многие программные компоненты копируются на диск, n Некоторые ограничения DLL: создавая записи в реестре, описывающие компоненты в системе. n Версионность n Размещение и установка n n n Изучение C#/ Модуль 17/ 5 из 47
Решение для "ада DLL" n . NET Framework обеспечивает следующие возможности для решения этой проблемы: n n n Приложения должны быть само-описательны. Информация о версиях должна записываться. При успешном запуске приложения, оно обязано записать связанный набор компонентов и их версии. . NET Framework должна позволять множественным версиям компонента сосуществовать в системе. Приложение должно быть изолировано. Изучение C#/ Модуль 17/ 6 из 47
Что такое сборки? n Сборки - это строительные блоки. NET Framework. Приватные (Private) n Закрытая сборка размещается с приложением. n Они используются для решения проблем n Доступна только для приложения. версионности и размещения DLL. n Не может разделяться между другими приложениями. n Сборки - коллекции информации, требуемые во n время выполнения для запуске приложения. n Разделяемые (Shared) n n Разделяемая сборка размещается в Два типа сборок в. NET Framework: nобщедоступном месте. Приватные (Private) Разделяемые (Shared) n n. Доступна другим приложениям. Изучение C#/ Модуль 17/ 7 из 47
Свойства n Сборки имеют следующие свойства: n n n n Реализуются как. exe-файлы или DLL-файлы. Разделяются разными приложениями. Должны иметь сильные имена. Загружаются так и тогда, как и когда это необходимо. Информация может быть получена через механизм отражения. Несколько версий могут использоваться одним приложением. Содержат один или несколько модулей. Изучение C#/ Модуль 17/ 8 из 47
Структура n n Метаданные сборки - предопределенную Каждая сборка имеет Содержат информацию метаданных о сборке, например, информацию о версии. структуру. Метаданные типа - Описывают данные в сборке и их Сборка состоит из следующих четырех частей, типы. называющихся: n Метаданные сборки (Assembly. NET преобразовывают Код MSIL - Компиляторы Microsoft Metadata) исходный код в промежуточный язык, называемый MSIL. Метаданные типа (Type Metadata) Код MSIL (MSIL Code) n Ресурсы - Файлы таких типов, как JPEG, text, XML и так далее, используемые в Ресурсы (Resources)приложении. Изучение C#/ Модуль 17/ 9 из 47
Создание сборки 1 -2 n n Сборки могут создаваться как отдельные файлы. exe или. dll, называемые одиночными сборками. В многофайловых сборках различные элементы сборки содержатся в разных файлах. Изучение C#/ Модуль 17/ 10 из 47
Создание сборки 2 -2 n Многофайловая сборка - Шаги по созданию Одиночная (однофайловая) сборка - есть многофайловой сборки в командной строке: два метода создания одиночных сборок. К ним относятся: исходный код 1. Создать 2. 3. 4. 1. Командная строка Visual Studio Создать главный исходный файл Одиночная сборка может быть командной строки. Ввести команду в приглашение создана в командной строке с помощью компиляторов командной строки. Запустить файл Синтаксис csc <filename> Пример csc Employee. cs 2. Итегрированная среда разработки (Integrated Development Environment, IDE) Одиночная сборка может быть создана в Visual Studio 2005. Изучение C#/ Модуль 17/ 11 из 47
Шаги по созданию многофайловой сборки 1 -3 1. Создать исходный код Пример using System; public class Student { public string Full. Name; public void Show. Name() { Console. Write. Line(“Student Full Name: “ + Например, Full. Name); csc / } t: module Student. cs } Сохранить код и скомпилировать в модули с помощью команды: csc /t: modulename. cs Изучение C#/ Модуль 17/ 12 из 47
Шаги по созданию многофайловой сборки 2 -3 2. Создать главный исходный файл Пример public class Main. Class { public static void Main(string[] args) { Student obj. Student = new Student(); obj. Student. Full. Name = “Mark Richards”; obj. Student. Show. Name(); } } В этом примере создается экземпляр класса Student, представленный в файле Student. cs. Метод Main далее вызывает метод Show. Name для объекта obj. Student класса Student. Изучение C#/ Модуль 17/ 13 из 47
Шаги по созданию многофайловой сборки 3 -3 3. Ввести команду в приглашение командной строки: csc /addmodule: modulename. netmodule /out: outfilename. exe sourcefilename. cs Например, csc /addmodule: Student. netmodule /out: Display. Name. exe Main. Class. cs Это генерирует. exe-файл с именем Display. Name. exe. Создаваемые модули могут быть собраны в одиночную сборку с помощью компилятора C#. 4. Для запуска файла, введите его имя Display. Name в командной строке. Изучение C#/ Модуль 17/ 14 из 47
Ресурсный файл n n n Это коллекция ресурсов, например, изображений, текста и звуков. Вышеуказанные ресурсы могут добавляться к сборкам. Используются, когда пользовательское приложение, разработанное для одной страны, переводится на другой язык. Модифицируются без реального изменения всего приложения. Хранят пары ключ-значение. Изучение C#/ Модуль 17/ 15 из 47
Создание ресурсного файла n n n С помощью утилиты Resgen. exe ресурсный файл, который является текстовым, может быть сконвертирован в оригинальный ресурсный файл. Далее ресурсный файл может быть внедрен в сборку или может добавляться внешним файлом. Шаги для создания ресурсного файла: n n Создать текстовый файл с требуемыми данными и сохранить его на локальной системе. Открыть командную строку Visual Studio 2005. В командной строке необходимо переместиться на диск, где находится. txt-файл. Ввести Resgen filename. txt, где filename - это имя текстового файла. Изучение C#/ Модуль 17/ 16 из 47
Использование класса “Resource. Writer” n n В примере экземпляр класса Resource. Writ er создается в методе Main(). Метод Add. Resource() может быть далее использован для добавления ресурсов к файлу Employee. res ources. Файлы с изображениями и другими типами могут быть добавлены к библиотеке базовых классов. NET. Этот класс - часть пространства имен System. Resources. Пример static void Main(string[] args) { Resource. Writer obj. Resource. Writer = new Resource. Writer(“Employee. resources”); obj. Resource. Writer. Add. Resource(“ 18780”, “James Anderson”); obj. Resource. Writer. Add. Resource(“ 22688”, “Ronny Hill”); obj. Resource. Writer. Add. Resource(“ 67453”, “Ben Tyler”); obj. Resource. Writer. Generate(); obj. Resource. Writer. Close(); } Изучение C#/ Модуль 17/ 17 из 47
Добавление ресурсного файла n Шаги для добавления ресурсного файла в сборку: 1. 2. 3. 4. 5. 6. 7. Откройте Microsoft Visual Studio 2005 IDE. Создайте проект ‘Employee. Demo’. Для добавления ресурса ‘Employee. resources’ к сборке, щелкните правой кнопкой на имени проекта Class library в Solution Explorer. Щелкните правой кнопкой и выберите пункт меню Add. Щелкните на пункт меню Existing Item. Выберите файл ‘Employee. resources’ в системе и щелкните на Add. Установите свойство Build Action ресурсного файла в Embedded Resource. Изучение C#/ Модуль 17/ 18 из 47
Использование ресурсного файла n Использование ресурсов n n Пространство имен System. Reflection должно использоваться для получения ресурсов из файла. Следующий пример возвращает значения ключевых пар, хранящихся в файле. Пример static void Main(string[] args) { Console. Write. Line(“Employees: “); Assembly obj. Assembly = Assembly. Get. Executing. Assembly(); Resource. Manager obj. Resource. Manage = new Resource. Manager(“Resource. Demo. Employee”, obj. Assembly); Console. Write. Line(obj. Resource. Manage. Get. String(“ 10789”)); Console. Write. Line(obj. Resource. Manage. Get. String(“ 56786”)); Console. Write. Line(obj. Resource. Manage. Get. String(“ 18780”)); Console. Write. Line(obj. Resource. Manage. Get. String(“ 22688”)); Console. Write. Line(obj. Resource. Manage. Get. String(“ 67453”)); } Изучение C#/ Модуль 17/ 19 из 47
Пространства имен и сборки Пространство имен Assembly Пространство имен - метод такого сведения классов в контейнер, что они могут ясно отличаться от других классов с тем же именем. Коды Microsoft. NET физически организованы и структуризованы в сборки. Сборка - это бинарный файл, содержащий выполняемый код. NET, скомпилированный в MSIL. Пространство имен - логическая группировка классов. Сборка - размещаемый модуль с поддержкой версионности. Пространство имен может содержать одну или несколько сборок. Сборка может содержать одно или несколько пространств имен. Пространства имен убирают массу неясностей со ссылками на объекты и упрощают разработку библиотек, позволяя родстенным объектам находится вместе. Через сборки легко управлять версионностью, безопасностью и другими аспектами размещения библиотек. Изучение C#/ Модуль 17/ 20 из 47
Занятие 2 - Приватные и разделяемые сборки На втором занятии, Приватные и разделяемые сборки, вы изучите: n Определение и описание приватных сборок. n Определение и описание разделяемых сборок. n Описание размещения сборки в глобальном кэше сборок (Global Assembly Cache, GAC). n Объяснение версионности сборок. Изучение C#/ Модуль 17/ 21 из 47
Приватные сборки n n n Доступны приложению, для которого они создавались. Создаются, если нет необходимости в сборках другого приложения. Некоторые преимущества приватных сборок: 1. 2. 3. Не требуют регистрации. Более защищенные. Нет ограничений соглашений именования ресурсов. Изучение C#/ Модуль 17/ 22 из 47
Размещение приватных сборок n Некоторые методы, сразмещается в приложении для Приватная сборка помощью которых приватные сборки могут размещаться приложением. эксклюзивного использования этим в приложении: После тестирования, сборка может nn Сопровождается манифестом сборки. размещаться простым копированием структуры папок на целевую машину с n Устанавливается в папке, содержащей помощью утилиты XCOPY. исполняемый файл приложения, или в ее n Также размещение возможно переносом в подпапках. Проводнике Windows. n n Размещается в структуре папок приложения. Изучение C#/ Модуль 17/ 23 из 47
“ILDASM. exe” n Модуль. NET, содержащий метаданные типов и код Синтаксис промежуточного языка (Intermediate Language, IL). <ILDASM> <filename. dll> или <ILDASM> <filename. exe> n n n Набор где, разработки. NET (Software Development Kit, для SDK) предлагает инструмент ILDASM для просмотра filename. dll/. exe: Имя сборки. Может быть. dll-файлом содержимого или. exe-файлом. сборок и манифестов. Отображает информацию в удобном для пользователя формате. Выводит информацию о пространствах имен и типах, включая их интерфейсы. Изучение C#/ Модуль 17/ 24 из 47
Разделяемые сборки n n Разделяемые сборки доступны для использования несколькими приложениям. Некоторые преимущества использования разделямых сборок: n n При разделении сборки код, написанный для определенного приложения, может использоваться другими приложениями. Разделяемая сборка гарантирует отсутствие конфликтов пространств имен в силу использования криптографических ключей. Управление версиями сборок предотвращает несанкционированное добавление или изменение кода посторонними. Разделяемая сборка требует меньше ресурсов, так как вместо загрузки в каждый исполняемый модуль, она загружается только раз, а затем отображается в другие ссылки. Изучение C#/ Модуль 17/ 25 из 47
Глобальный кэш сборок n n n Разделяемые сборки хранятся в глобальном кэше сборок (Global Assembly Cache, GAC). Каждая сборка, необходимая для нескольких приложений, хранится в GAC находится в папке C: WINDOWSassembly в Windows XP, C: WINNTassembly в Windows 2000. Несколько копий сборки могут храниться в GAC с различной версионной информацией. Для установки или удаления разделяемых сборок в GAC может использоваться инструмент gacutil. exe. Изучение C#/ Модуль 17/ 26 из 47
Использование сильных имен n Сильные имена для сборки могут создаваться и присваиваться специальной утилитой сильных имен (sn. exe). Изучение C#/ Модуль 17/ 27 из 47
Подписывание сборки n Следующий процесс отражает процедуру подписывания сборки: 1. 2. 3. Сборке X назначается сильное имя. Сборка Y - потребитель сборки X. Манифест сборки Y включает токен, указывающий открытый ключ сборки X. Общая среда выполнения языка (Common Language Runtime, CLR) проверяет сигнатуру сильного имени, когда сборка помещается в GAC. Манифест сборки Y содержит ключ, используемый для генерации сильного имени сборки X. . NET Framework проверяет и гарантирует, что биты сборки X не подменены. Изучение C#/ Модуль 17/ 28 из 47
Создание пары ключей § Пара открытого/закрытого ключей должна быть создана для подписи сборки с сильным именем. Синтаксис sn –k <filename> где, filename: имя выходного файла, содержащего пару ключей. § Для создания пары ключей, называемой key. snk, введите следующий код: sn –k key. snk Изучение C#/ Модуль 17/ 29 из 47
Использование строгого имени § § Инструмент линковки сборки (al. exe) генерирует файл с манифестом сборки от одного или нескольких файлов, которые могут быть модулями или ресурсными файлами. Введите следующую команду в приглашение командной строки: al /out: <assemblyname> <modulename> /keyfile: <filename> где, assemblyname: Имя сборки для подписи с сильным именем. modulename: Имя модуля с кодом, использующегося в создании сборки. filename: Имя контейнера или файла, содержащего пару ключей. Например, al /out: Employee. dll Employee. Module. netmodule /keyfile: key. snk Изучение C#/ Модуль 17/ 30 из 47
Ссылки на сборку n Это может быть сделано во время компилирования или выполнения Для реализации ссылки на сборку во время компилирования, введите команду: csc /reference: <assembly name> где, Assemblyname: Имя адресуемой сборки со строгим именем. Другие опции компилятора, например, /t: library для создания библиотечной сборки. Изучение C#/ Модуль 17/ 31 из 47
Размещение сборки в GAC 1 -3 n n n Сборка должна размещаться в глобальном кэше сборок. Размещение в GAC позволяет различным приложениям ссылаться на сборку из разделяемой локации. Сборку можно разместить в GAC тремя возможными путями: 1. Проводник Windows 2. Инструмент Global Assembly Cache (gacutil. exe) 3. Инсталляторы Изучение C#/ Модуль 17/ 32 из 47
Размещение сборки в GAC 2 -3 n n Проводник Windows - Для размещения сборки в глобальном кэше сборок, просто перетащите сборку на папку глобального кэша. Инструмент Global Assembly Cache (gacutil. exe) - Этот инструмент, предоставляемый. NET Framework для установки и удаления из GAC. Синтаксис gacutil /i assemblyname где, assemblyname: Имя сборки для размещения в глобальном кэше сборок. Например, gacutil /i Employee. dll Изучение C#/ Модуль 17/ 33 из 47
Размещение сборки в GAC 3 -3 n Инталляторы - Используются для размещения сборок в GAC. Изучение C#/ Модуль 17/ 34 из 47
Просмотр всех сборок n n “Assembly” - Сборка Student. dll с различными Все сборки внутри данной папки могут быть версиями установлена в папке сборки, которая будет просмотрены с помощью Проводника Windows просмотрена. или в командной строке. Папка “GAC_MSIL” - Папка GAC_MSIL отображает Различные сборки: подпапки. “Assembly” n Папка “GAC_MSIL” Папка “Student” - Отображает все подпапки сборки Student. dll. n Папка “Student” n С помощью Проводника Windows n n n Using Windows Explorer - Изображение показывает, что сборка Student. dll имеет три версии: 1. 1. 0. 0, 1. 2. 0. 0, и 1. 3. 0. 0. Изучение C#/ Модуль 17/ 35 из 47
Инструмент глобального кэша сборок n n Сборками Синтаксис можно манипулировать, их можно добавлять, удалять и просматривать с помощью gacutil /option Assembly. Name инструмента глобального кэша сборок. где, option: Опция командной строки. Различные опции для gacutil. exe перечислены Assembly. Name: Имя сборки. в таблице: Пример Опция Описание gacutil /u Employee. dll /l Список всех сборок в GAC /i Устанавливает указанную сборку в GAC /u Удаляет указанную сборку из GAC. /f Принудительная переустановка сборки, если сборка с тем же именем уже находится в папке GAC Изучение C#/ Модуль 17/ 36 из 47
Определение версионности n n n Одна из наиболее важных проблем, связанная с разработкой программного обеспечения, это задача поддержки файлов и версионности. Поддержка версионности одной сборки бессмысленна, так как она находится в папке приложения, и два файла с одинаковым именем не могут находится в одной папке. Версионность важна для разделяемых сборок, когда несколько сборок с различными номерами версий могут быть загружены в GAC. Изучение C#/ Модуль 17/ 37 из 47
Версионность сборок 1 -2 n n n Позволяет разделять сборки в GAC. Сборки с одинаковыми именами, но различными версиями, могут сосуществовать в одной папке. Номер версии сборки может быть занесен вручную в файл Assembly. Info. cs внутри папки приложения Properties. Изучение C#/ Модуль 17/ 38 из 47
Версионность сборок 2 -2 n Получение номера версии Номер версии сборки. NET - Следующий пример отображает номерсостоит из четырех n Версия сборки обычно версии для разделяемой сборки Student. dll. частей, разделяемых точками. Пример n Учитывает изменения в старшем или младшем usingномере версии. System. Collections. Generic ; using System. Text; В примере объект using System. Reflection; n Изменения в номере ревизии (revision). namespace Student сборки { инициализирован n public class Student номере билда (build). Изменения в передачей { n static void Main(string[] args) { Assembly obj. Assembly = Assembly. Get. Assembly(typeof(Student )); Console. Write. Line(obj. Assembly. Full. Name ); Console. Read. Line(); } полностью заданного имени класса методу Get. Assembly() класса Assembly. Поддержка версионности сборки n Устанавливается в файле Assemblyinfo. cs }проекта. } Изучение C#/ Модуль 17/ 39 из 47
Занятие 3 - Отражение На последнем занятии, Отражение, вы изучите: n Определение процесса отражения (reflection). n Список классов пространства имен System. Reflection. n Список и описание методов и свойств класса Type. Изучение C#/ Модуль 17/ 40 из 47
Отражение (Reflection) n n n Мощный способ сбора и манипулирования информацией, существующей в сборках приложений и их метаданными. Метаданные содержат всю информацию типов, используемых приложением. Классы, необходимые для извлечения информации, находятся в пространстве имен System. Reflection. Изучение C#/ Модуль 17/ 41 из 47
Извлечение метаданных из сборки n n Класс Пример Assembly, представленный в пространстве имен System. Reflection, . . . Assembly obj. Assembly. Information = typeof(Object). Module. Assembly; используется для получения информации и // Загрузка сборки по имени ее файла obj. Assembly. Information = сборками. манипулирования Assembly. Load. From(“Employee. exe”); // Выгрузка типов, доступных в сборке Type [] assembly. Type. Information = obj. Assembly. Information. Get. Types(); Используется для определения и загрузки foreach (Type. Information in assembly. Type. Information) сборок, загрузки модулей, перечисленных в { Console. Write. Line (Type. Information. Full. Name); манифесте сборки. }. . . Используется для обнаружения типа в данной сборке и создания его экземпляра. Два метода получения объекта Type из сборок Assembly. Get. Type или Assembly. Get. Types. Изучение C#/ Модуль 17/ 42 из 47
“System. Reflection” n n n n Event. Info - Используется для выборки информации об n Некоторые наиболее важные классы в Assembly - Используется для определения сборки. имени события, типе данных обработки события, пространстве имен System. Reflection: пользовательских атрибутах, объявлении типа и n Assembly отраженном типе события. Module - Используется для осуществления отражения n Module модуля. n Constructor. Info Property. Info - Используется для выборки информации n Method. Info о имени свойства, -типе данных, объявлении типа, Constructor. Info Используется для отражения n Event. Info отраженном типе и статусе свойства - доступно по конструктора. записи. Property. Info по чтению. или только n n Parameter. Info Method. Info - Используется для получения такой Parameter. Info - Используется для выборки информации, как имя, возвращаемый тип, параметры, информации о имени параметра, реализации. позиции модификаторы доступа и детали типе данных, параметра в сигнатуре метода. Изучение C#/ Модуль 17/ 43 из 47
Класс “Type” 1 -2 n n Различные типы - класс, интерфейс, перечисление, параметры типа, обобщенные определения типа, открытые или закрытые сконструированные обобщенные типы. Класс Type - база всей отражаемой информации для объекта. Изучение C#/ Модуль 17/ 44 из 47
Класс “Type” 2 -2 n Некоторые методы и свойства класса Type перечислены в таблице: Пример Имя Описание using System; using System. Reflection; Get. Methods() Возвращает массив объектов Method. Info, описывающих методы public class Student класса. { public Student() { } Get. Fields() Возвращает массив объектов Field. Info, описывающих публичные static Student() { } поля класса. public Student(int i) { } public static void Main() Get. Constructors() Возвращает все конструкторы указанного типа. { 2 Constructor. Info[] cons = typeof(Student). Get. Constructors (); типа. Get. Interfaces() Возвращает все интерфейсы, реализованные для True Console. Write. Line(cons. Length ); True Get. Members()for (int i = 0; i < cons. Length; i++)типа. Возвращает все элементы { Invoke. Member() Console. Write. Line(cons[i]. Is. Public ); Вызывает элемент типа. Is. Abstract } Возвращает значение, указывающее, является ли тип абстрактным. } } Is. Sealed Возвращает значение, указывающее, является ли тип закрытым. Вывод Is. Class Возвращает значение, указывающее, является ли тип классом; то есть не значащим типом или интерфейсом. Is. Public Возвращает значение, указывающее, является ли тип публичным. Изучение C#/ Модуль 17/ 45 из 47
Резюме 1 -2 n n Сборки - строительные блоки. NET Framework для решения проблем поддержки версионности и размещения DLL. n Есть два типа сборок - приватные и разделяемые. n Сборка содержит четыре части, называемые метаданными сборки, метаданными типа, кодом MSIL и ресурсами. Приватные или разделяемые сборки n Приватная сборка размещается в приложении для эксклюзивного использования этим приложением. n Разделяемые сборки доступны для использования несколькими приложениям. n Каждая сборка, необходимая для нескольких приложений, хранится в GAC. n Сборки в GAC могуть устанавливаться или удаляться с помощью инструмента gacutil. exe. Изучение C#/ Модуль 17/ 46 из 47
Резюме 2 -2 n Отражение (Reflection) n Отражение - одна из особенностей. NET framework, имеющая важное значение для разработки больших приложений. n Классы, необходимые для извлечения информации, находятся в пространстве имен System. Reflection. n Класс System. Type содержит методы, позволяющие разработчику извлекать ценную информацию о текущем типе во время выполнения. Изучение C#/ Модуль 17/ 47 из 47
ExpC_Module 17Ru_1.ppt