Шрифт:
Чтобы проиллюстрировать процесс определения компоновочного блока .NET в среде выполнения, давайте создадим одномодульный динамический компоновочный блок с именем MyAssembly.dll. В этом модуле будет содержаться класс HelloWorld. Тип HelloWorld поддерживает конструктор, используемый по умолчанию, и пользовательский конструктор для присваивания значения приватной переменной (theMessage) типа string. Кроме того, HelloWorld предлагает открытый метод экземпляра с именем SayHello, который выводит приветствие в стандартный поток ввода-вывода, а также еще один метод экземпляра, GetMsg, который возвращает внутреннюю приватную строку. В результате вы должны программно сгенерировать следующий тип класса.
Предположим, вы cоздали новый проект консольного приложения в Visual Studio 2005, назвав его DynAsmBuilder. Переименуйте исходный класс в MyAsmBuilder и определите статический метод с именем CreateMyAsm. Этот единственный метод будет ответственен за следующее:
• определение характеристик динамического компоновочного блока (имя, версия и т.д.);
• реализацию тина HelloClass;
• запись компоновочного блока, сгенерированного в памяти, в физический файл.
Также отметим, что метод CreateMyAsm использует в качестве единственного параметра тип System.AppDomain, который будет использоваться для получения доступа к типу AssemblyBuilder, связанному с текущим доменом приложения (см. главу 13, где обсуждаются домены приложений .NET). Вот полный программный код, с последующим анализом.