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

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

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 242
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

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

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

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

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

Перейти на страницу:
Комментариев (0)