Список доменов приложения процесса

Список доменов приложения процесса

Для примера программного взаимодействия с доменами приложений .NET предположим, что у нас есть новое консольное приложение C# с именем AppDomainManipulator, в рамках которого определяется статический метод PrintAllAssembliesInAppDomain(). Этот вспомогательный метод использует AppDomain.GetAssemblies(), чтобы получить список всех двоичных файлов .NET, выполняющихся в рамках данного домена приложения.

Соответствующий список представляется массивом типов System.Reflection. Assembly, поэтому необходимо использовать пространство имен System. Reflection (см. главу 12). Получив массив компоновочных блоков, вы выполняете цикл по элементам массива и печатаете понятное имя и версию каждого модуля.

public static void PrintAllAssembliesInAppDomain(ApsDomain ad) {

 Assembly[] loadedAssemblies = ad.GetAssemblies();

 Console.WriteLine("*** Компоновочные блоки в рамках {0} *** ", ad.FriendlyName);

 foreach (Assembly a in loadedAssemblies) {

  Console.WriteLine("-Имя: {0}", a.GetName().Name);

  Console.WriteLine("-› Версия: {0} ", a.GetName().Version);

 }

}

Теперь обновим метод Main(), чтобы перед вызовом PrintAllAssembliesInAppDomain() получить ссылку на текущий домен приложения, используя свойство AppDomain.CurrentDomain.

Чтобы сделать пример более интересным, метод Main() открывает окно сообщения Windows Forms (для этого среда CLR должна загрузить компоновочные блоки System.Windows.Forms.dll, System.Drawing.dll и System.dll, так что не забудьте установить ссылки на эти компоновочные блоки и соответственно изменить набор операторов using).

static void Main(string[] args) {

 Console.WriteLine("***** Чудесное приложение AppDomain ***** ");

 // Чтение информации для текущего AppDomain.

 AppDomain defaultAD= AppDomain.CurrentDomain;

 MessageBox.Show('Привет");

 PrintAllAssembliesInAppDomain(defaultAD);

 Console.ReadLine();

}

На рис. 13.6 показан соответствующий вывод (номера версий у вас могут быть другими).

Рис. 13.6. Перечень компоновочных блоков в рамках текущего домена приложений