
- •Архитектуры и модели программ и знаний
- •.NET Framework
- •Common Language Runtime. Цели:
- •Common Language Runtime
- •Common Language Runtime Сборки (assemblies)
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Windows Forms
- •Пример (J. Prosise):
- •GUI, создаваемый при исполнении примера Windows Forms
- •Web Forms
- •Web Forms
- •Web Forms
- •ADO.NET – обработка данных
- •Языки:
- •Общая система типов
- •Цели
- •Содержание
- •Часть 1. Обзор
- •История типов
- •типа
- •Контракты
- •Приведения (Coercions)
- •Преобразование типа (Casting)
- •Common Language
- •Часть 2: Типы и типология
- •Типы-значения и типы- ссылки
- •Примитивные типы-значения
- •Примитивные ссылочные типы
- •Boxing и Unboxing
- •Перечисления: (red, yellow, green)
- •Исключения
- •Исключения (CTS)
- •Делегаты и события
- •Атрибуты
- •Способы применения атрибутов
- •Часть 3. Внутренняя структура
- •Элементы типов 1/2
- •Элементы типов 2/2
- •Имена в CTS
- •Видимость и доступ
- •Наследование типов
- •Наследование элементов типа
- •Часть4: Пример многоязыкового наследования (Microsoft)
- •Класс “Father” на Visual Basic.NET
- •Резюме
- •Сборки
- •Цели
- •Содержание
- •Часть 1. Обзор
- •Что такое сборка
- •Статические и динамические сборки
- •Сборки
- •Зависимости
- •Зависимости типов
- •Сборки и пространства имен
- •Сборки, часть 2: Концепции и элементы
- •Манифест – стандартные элементы
- •Манифест – пользовательские элементы
- •Многофайловые сборки
- •Версии
- •Многоверсионное
- •безопасность сборки
- •Полные имена сборок
- •Утилита поддержки полных имен
- •Присваивание полного имени
- •Отложенное присваивание
- •Использование сборок с полными именами
- •Инструменты для развертывания сборок и управления ими
- •Ассемблер: ilasm
- •Дизассемблер: ildasm
- •Инсталляция
- •Преимущества GAC
- •Управление сборками во время
- •Загрузка сборки
- •Области приложений (Application Domains)
- •Оптимизации сборок во время
- •Just-In-Time (JIT) -
- •Предкомпиляция (PreJITting) с помощью утилиты ngen
- •Резюме
- •Вопросы и домашнее задание к лекции 18

Статические и динамические сборки
Статические сборки
Генерируются компиляторами
Загружаются с диска или из сетиДинамические сборки
Генерируются “на лету”(во время выполнения)
генерируются с использованием
Reflection.Emit API
Могут быть временными (не записываться на диск)
(C)Сафонов В.О. 2012

Сборки
Модуль – единица компиляции
Модуль содержит типы и локальные методыСборки содержат модули
Сборки состоят из модулей и ресурсов
Манифест сборки – ее “инвентарный список”
(C) Сафонов В.О. 2012

Зависимости
Сборки рассматриваются как экспортируемые коллекции ресурсов, не зависящие от реализацииСборки могут зависеть от других сборок
Сборки могут импортировать общедоступные ресурсы других сборок
Типы
Файлы ресурсов
Зависимости описаны в манифестеРазрешение символов выполняется только во время исполнения (никакой статической линковки)
История: списки импорта и экспорта модуля впервые введены в языке Modula Никлаусом Виртом (1977)
(C) Сафонов В.О. 2012

Зависимости типов |
|
|
||
|
|
Public |
External |
|
Public |
External |
Types |
||
Refs |
||||
Types |
Assembly |
|||
Refs |
Types |
|
||
Assembly |
|
|||
Types |
|
Module3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Module1 |
Module2 |
|
|
|
|
|
|
Public |
|
||||
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
Types |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
Module |
|
|
|
|
|
Public |
|
|
|
|
|
|
Types |
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
Assemb |
|
|
|
|
||||
|
|
|
Types |
|
|
|
|
|
|
|
|
||
|
|
|
Module |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
ly Types |
|
|
|
|||||
|
|
|
Types |
|
|
|
|
|
|
|
|
||
ref: null, TypeA, module1 |
|
|
|
|
|
|
|
|
|||||
ref: null, TypeB, module2 |
|
|
|
|
Сборка B |
|
|
|
|||||
ref: AssemblyB, TypeC, module3 |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
||||||
Сборка A |
(C) Сафонов В.О. 2012 |
|
|
|

Сборки и пространства имен
Пространства имен используются для группировки
именСборка может содержать несколько пространств имен
Пространства имен могут быть разбиты на несколько сборок
Структурно идентичные типы, определенные дважды явным образом, считаются различными
Как сборки, так и пространства имен могут быть
включены в проект независимо:
Пространства имен импортируются на уровне исходного кода, т.е. это понятие языка программирования (отображаемое его компилятором
в метаданных) – например, C# , а не базовое понятие
.NET (CLI)
Ссылки на сборки указываются в опциях using System.Runtime.Remoting.Services;
компилятора
csc /r:System.Runtime.Remoting.DLL ...
(C) Сафонов В.О. 2012

Сборки, часть 2: Концепции и элементы
Элементы сборки
МанифестИнформация о версии
Полномочия безопасности
Физическое представлениеПолные имена (strong names)
(C) Сафонов В.О. 2012

Манифест – стандартные элементы
Манифест – таблица информационных записейМанифест содержит информацию о:
Имени сборки
Версии
Полном имени сборки
Культуре (т.е. области локализации)
Процессоре и ОС
Файлах, включенных в сборку
Ссылках на типы и ресурсы
Экспортируемых и локальных типах
(C)Сафонов В.О. 2012

Манифест – пользовательские элементы
AssemblyCompanyAssemblyConfigurationAssemblyCopyrightAssemblyDefaultAliasAssemblyDescriptionAssemblyInformationalVersionAssemblyProductAssemblyTitleAssemblyTrademark
(C) Сафонов В.О. 2012

Многофайловые сборки
Связаны между собой на основе метаданных сборки
Физически не объединены в один файл
Module1 |
Module2 |
Graph |
Assembly Module
Manifest Manifest
Assembly.exe Module2.dll Graph.jpg
(C) Сафонов В.О. 2012

Версии
Манифест содержит информацию о версииНомер версии для совместимости:
Major, minor, build, revision: 2.1.1254.0Информационный номер версии:
Строка, хранимая в AssemblyInformationalVersion
Ссылки на другие сборки содержат информацию об их версиях
(C) Сафонов В.О. 2012