Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

using System.Linq;

static void ListAllAssembliesInAppDomain()

{

  // Получить доступ к домену приложения для текущего потока.

  AppDomain defaultAD = AppDomain.CurrentDomain;

  // Извлечь все сборки, загруженные в стандартный домен приложения.

  var loadedAssemblies =

    defaultAD.GetAssemblies().OrderBy(x=>x.GetName().Name);

  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}" );

  }

}

Запустив приложение еще раз, вы заметите, что в память также была загружена сборка System.Linq.dll:

** Here are the assemblies loaded in DefaultAppDomainApp **

-> Name, Version: DefaultAppDomainApp:1.0.0.0

-> Name, Version: System.Console:5.0.0.0

-> Name, Version: System.Linq:5.0.0.0

-> Name, Version: System.Private.CoreLib:5.0.0.0

-> Name, Version: System.Runtime:5.0.0.0

-> Name, Version: System.Text.Encoding.Extensions:5.0.0.0

-> Name, Version: System.Threading:5.0.0

Изоляция сборок с помощью контекстов загрузки приложений

Как вам уже известно, домены приложений представляют собой логические разделы, используемые для обслуживания сборок .NET Core. Кроме того, домен приложения может быть дополнительно разделен на многочисленные границы контекстов загрузки. Концептуально контекст загрузки создает область видимости для загрузки, распознавания и потенциально выгрузки набора сборок. По существу контекст загрузки .NET Core наделяет одиночный домен приложения возможностью установить "конкретный дом" для заданного объекта.

На заметку! Хотя понимать процессы и домены приложений довольно-таки важно, в большинстве приложений .NET Core никогда не потребуется работать с контекстами загрузки. Этот обзорный материал был включен в книгу только ради того, чтобы представить более полную картину.

Класс AssemblyLoadContext позволяет загружать дополнительные сборки в их собственные контексты. В целях демонстрации создайте новый проект библиотеки классов по имени ClassLibaryl и добавьте его к текущему решению. С использованием интерфейса командной строки .NET Core CLI выполните показанные ниже команды в каталоге, содержащем текущее решение:

dotnet new classlib -lang c# -n ClassLibrary1 -o .ClassLibrary1 -f net5.0

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

dotnet sln .Chapter14_AllProjects.sln add .ClassLibrary1

Затем добавьте в DefaultAppDomainApp ссылку на проект ClassLibrary1, выполнив следующую команду CLI:

dotnet add DefaultAppDomainApp reference ClassLibrary1

Если вы работаете в Visual Studio, тогда щелкните правой кнопкой мыши на узле решения в окне Solution Explorer, выберите в контекстном меню пункт AddNew Project (Добавить►Новый проект. В результате создается проект ClassLibrary1 и добавляется к решению. Далее добавьте ссылку на новый проект, щелкнув правой кнопкой мыши на имени проекта DefaultAppDomainApp и выбрав в контекстном меню пункт Add►References. Выбрать Projects►Solution (Проекты►Решение), как показано на рис. 14.3.

Добавьте в новую библиотеку классов класс Car с таким кодом:

namespace ClassLibrary1

{

  public class Car

  {

    public string PetName { get; set; }

    public string Make { get; set; }

  public int Speed { get; set; }

  }

}

Теперь, имея новую сборку, добавьте необходимые операторы using:

using System.IO;

using System.Runtime.Loader;

Метод, добавляемый следующим, требует наличия операторов using для пространств имен System.IO и System.Runtime.Loader, которые вы уже добавили в Program.cs. Вот код этого метода:

static void LoadAdditionalAssembliesDifferentContexts()

{

  var path =

   Path.Combine(AppDomain.CurrentDomain.BaseDirectory,

                "ClassLibrary1.dll");

  AssemblyLoadContext lc1 =

    new AssemblyLoadContext("NewContext1",false);

  var cl1 = lc1.LoadFromAssemblyPath(path);

  var c1 = cl1.CreateInstance("ClassLibrary1.Car");

  AssemblyLoadContext lc2 =

    new AssemblyLoadContext("NewContext2",false);

  var cl2 = lc2.LoadFromAssemblyPath(path);

  var c2 = cl2.CreateInstance("ClassLibrary1.Car");

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*