Принципы объектно-ориентированного программирования

         

Вывод списка модулей сборки



Вывод списка модулей сборки

Хотя большинство приложений в этой книге состоят из одного модуля, вы можете создавать сборки, состоящие из нескольких модулей. Получать имена модулей из объекта Assembly можно двумя способами. Первый — это запрос массива всех модулей. При этом осуществляется проход по всем модулям и вывод любых нужных данных. Второй способ — получение информации о конкретном модуле.

Чтобы проиллюстрировать циклический опрос модулей, нужно создать сборку, состоящую из более чем одного модуля. Я сделаю это путем перевода Get Assembly Name в собственный класс и размещения этого класса в отдельном файле с именем Assembly Utils.netmodule, например, так: using System.Diagnostics;

namespace MyUtilities {



public class AssemblyUtils {

public static string GetAssembiyName(string[] args) {

string assemblyName;

if (0 == args.Length) <

Process p = Process.GetCurrentProcessQ;

assemblyName = p.ProcessName + ".exe"; } else

assemblyName = args[0];

ч

return assemblyName; } } }

После этого создаем модуль netmodule командой: esc /target:module AssemblyUtils.es

Переключатель /target-.module затавляет компилятор генерировать модуль, который позже будет включен в сборку. Приведенная команда создаст файл AssemblyUtils.netmodule. Подробнее о создании сборок и модулей см. главу 18.

А сейчас я хочу создать вспомогательный модуль, чтобы у нас был предмет для отражения. Приведенное ниже приложение будет использовать класс AssemblyUtils. Обратите внимание на оператор using, в котором указано пространство имен My Utilities.

using System;

using System.Reflection;

using MyUtilities;

class GetModulesApp {

public static void Hain(string[] args)

{

string assemblyNarae = AssemblyUtils.GetAssemblyName(args);

Console.WriteLine("Loading info for " + assemblyName); Assembly a = Assembly.LoadFrom(assemblyName);

Module[] modules = a.GetModulesO; foreach(Module m in modules) <

Console.WriteLine("Module: " + m.Name); } } }

Чтобы скомпилировать это приложение и добавить к сборке модуль AssemblyUtils.netmodule, нужно задействовать переключатели командной строки:

esc /addmodule:AssemblyUtils.netmodule GetModules.es

Теперь у нас есть сборка из двух модулей. Чтобы увидеть это, запустите приложение. При этом получатся такие результаты:

Loading info for GetModulesApp.exe

Module: GetModulesApp.exe

Module: AssemblyUtils.netmodule

Как стало ясно из кода, я просто создал экземпляр объекта Assembly и вызвал его метод GetModules. Затем я циклически обработал возвращенный массив и вывел имя каждого из них.

 

Содержание раздела