Язык программирования C#9 и платформа .NET5
Часть 276 из 642 Информация о книге
using System.Reflection;using System.Runtime.Loader;Console.WriteLine("***** Fun with the default AppDomain *****\n");DisplayDADStats();Console.ReadLine();static void DisplayDADStats(){// Получить доступ к домену приложения для текущего потока.AppDomain defaultAD = AppDomain.CurrentDomain;// Вывести разнообразные статистические данные об этом домене.Console.WriteLine("Name of this domain: {0}",defaultAD.FriendlyName);// Дружественное имя этого доменаConsole.WriteLine("ID of domain in this process: {0}",defaultAD.Id);// Идентификатор этого процессаConsole.WriteLine("Is this the default domain?: {0}",defaultAD.IsDefaultAppDomain());// Является ли этот домен стандартнымConsole.WriteLine("Base directory of this domain: {0}",defaultAD.BaseDirectory);// Базовый каталог этого доменаConsole.WriteLine("Setup Information for this domain:");// Информация о настройке этого доменаConsole.WriteLine("\tApplication Base: {0}",defaultAD.SetupInformation.ApplicationBase);// Базовый каталог приложенияConsole.WriteLine("\t Target Framework: {0}",defaultAD.SetupInformation.TargetFrameworkName);// Целевая платформа}Ниже приведен вывод:
***** Fun with the default AppDomain *****Name of this domain: DefaultAppDomainAppID of domain in this process: 1Is this the default domain?: TrueBase directory of this domain: C:\GitHub\Books\csharp8-wf\Code\Chapter_14\DefaultAppDomainApp\DefaultAppDomainApp\bin\Debug\net5.0\Setup Information for this domain:Application Base: C:\GitHub\Books\csharp8-wf\Code\Chapter_14\DefaultAppDomainApp\DefaultAppDomainApp\bin\Debug\net5.0\Target Framework: .NETCoreApp,Version=v5.0Обратите внимание, что имя стандартного домена приложения будет идентичным имени содержащегося внутри него исполняемого файла (
в этом примере). Кроме того, значение базового каталога, которое будет использоваться для зондирования обязательных внешних закрытых сборок, отображается на текущее местоположение развернутого исполняемого файла.DefaultAppDomainApp.exeПеречисление загруженных сборок
С применением метода
уровня экземпляра можно просмотреть все сборки .NET Core, загруженные в указанный домен приложения. Метод возвращает массив объектов типаGetAssemblies()(рассматриваемого в главе 17). Для этого вы должны импортировать пространство именAssemblyв свой файл кода (как делали ранее).System.ReflectionВ целях иллюстрации определите в классе Program новый вспомогательный метод по имени
. Он будет получать список всех загруженных сборок и выводить для каждой из них дружественное имя и номер версии:ListAllAssembliesInAppDomain()static void ListAllAssembliesInAppDomain(){// Получить доступ к домену приложения для текущего потока.AppDomain defaultAD = AppDomain.CurrentDomain;// Извлечь все сборки, загруженные в стандартный домен приложения.Assembly[] loadedAssemblies = defaultAD.GetAssemblies();Console.WriteLine("***** Here are the assemblies loaded in {0} *****\n",defaultAD.FriendlyName);foreach(Assembly a in loadedAssemblies){// Вывести имя и версиюConsole.WriteLine($"-> Name,Version: {a.GetName().Name}:{a.GetName().Version}" );}}Добавив к операторам верхнего уровня вызов метода
, вы увидите, что в домене приложения, обслуживающем вашу исполняемую сборку, используются следующие библиотеки .NET Core:ListAllAssembliesInAppDomain()***** Here are the assemblies loaded in DefaultAppDomainApp *****-> Name, Version: System.Private.CoreLib:5.0.0.0-> Name, Version: DefaultAppDomainApp:1.0.0.0-> Name, Version: System.Runtime:5.0.0.0-> Name, Version: System.Console:5.0.0.0-> Name, Version: System.Threading:5.0.0.0-> Name, Version: System.Text.Encoding.Extensions:5.0Важно понимать, что список загруженных сборок может изменяться в любой момент по мере написания нового кода С#. Например, предположим, что метод
модифицирован так, чтобы задействовать запрос LINQ, который упорядочивает загруженные сборки по имени:ListAllAssembliesInAppDomain()