Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Генерирование компоновочного блока и набора модулей
Генерирование компоновочного блока и набора модулей
Метод начинается с указания минимального набора характеристик компоновочного блока, для чего используются типы AssemblyName и Version (определенные в пространстве имен System.Reflection). Затем с помощью метода уровня экземпляра AppDomain.DеfineDynamicAssembly() вы получаете тип AssemblyBuilder (напомним, что вызывающая сторона передаст в метод CreateMyAsm() ссылку на AppDomain).
// Установка общих характеристик компоновочного блока
// и получение доступа к типу AssemblyBuilder.
public static void CreateMyAsm(AppDomain currAppDomain) {
AssemblyName assemblyName = new AssemblyName();
assemblyName.Name = "MyAssembly";
assemblyName.Version = new Version("1.0.0.0");
// Создание нового компоновочного блока в текущем AppDomain.
AssemblyBuilder assembly = currAppDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
…
}
Как видите, при вызове AppDomain.DefineDynamicAssembly() вы должны указать режим доступа к компоновочному блоку. Этот режим может задаваться любым из значений, указанных в табл. 15.10.
Таблица 15.10. Значения перечня AssemblyBuilderAccess
Значение | Описание |
---|---|
ReflectionOnly | Динамический компоновочный блок может только отображаться |
Run | Динамический компоновочный блок может выполняться в памяти, но не сохраняться на диск |
RunAndSave | Динамический компоновочный блок может выполняться в памяти и сохраниться на диск |
Save | Динамический компоновочный блок может сохраняться на диск, но не выполняться в памяти |
Следующей задачей является определение набора модулей для нового компоновочного блока. Поскольку данный компоновочный блок является одномодульным, вы должны определить только один модуль. Если с помощью метода DefineDynamicModule() требуется построить многомодульный компоновочный блок, вы должны указать необязательный второй параметр, задающий имя данного модуля (например, myMod.dotnetmodule). Однако при создании одномодульного компоновочного блока имя модуля будет идентично имени самого компоновочного блока. Так или иначе, после завершения работы метода DefineDynamicModule() вы получите ссылку на действительный тип ModuleBuilder.
// Одномодульный компоновочный блок.
ModuleBuilder module = assembly .DefineDynamicModule("MyAssembly", "MyAssembly.dll");
- Исследование пространства имен System.Reflection.Emit
- Роль System.Reflection.Emit.ILGenerator
- Генерирование динамического компоновочного блока
- Генерирование компоновочного блока и набора модулей
- Роль типа ModuleBuilder
- Генерирование типа HelloClass и принадлежащей ему строковой переменной
- Генерирование конструкторов
- Генерирование метода HelloWorld()
- Использование динамически сгенерированного компоновочного блока
- Генерирование исключений
- Загрузка модулей Apache
- Часть III Конструктор речевых модулей для скриптов и стандартов продаж Изменения в продажах и требования к речевым модул...
- Описание типов модулей оперативной памяти
- Извлечение и установка модулей памяти
- Характеристики модулей памяти
- Поиск и устранение неисправностей модулей памяти
- Приложение 2 100 SEO-модулей
- В Adobe Acrobat Reader русский текст на экране читается нормально, а при печати получается текст из набора символов. Как...
- 8.2. Создание набора фреймов
- Правила набора текста
- Создание подстановки из фиксированного набора значений