{AppContext.GetData ("PLATFORM_RESOURCE_
ROOTS")}");Console.WriteLine();
Console.WriteLine($"NATIVE_DLL_SEARCH_DIRECTORIES:
{AppContext.GetData ("NATIVE_DLL_SEARCH_
DIRECTORIES")}");Console.WriteLine();
Console.WriteLine($"APP_PATHS: {AppContext.GetData("APP_PATHS")}");
Console.WriteLine();
Console.WriteLine($"APP_NI_PATHS: {AppContext.GetData("APP_NI_PATHS")}");
Console.WriteLine();
Console.ReadLine();
Запустив приложение, вы увидите большинство значений, поступающих из переменной TRUSTED_PLATFORM_ASSEMBLIES
C:\Program Files\dotnet\shared\Microsoft.NETCore.Арр\5.0.0 (номер версии у вас может быть другим).В список добавляется каждый файл, на который напрямую ссылается ваше приложение, а также любые файлы исполняющей среды, требующиеся вашему приложению. Список библиотек исполняющей среды заполняется одним или большим числом файлов *.deps.json
Microsoft.NETCore.Арр.deps.json.По мере возрастания сложности вашего приложения будет расти и список файлов в TRUSTED_PLATFORM_ASSEMBLIES
Microsoft.EntityFrameworkCore, то список требующихся сборок расширится. Чтобы удостовериться в этом, введите показанную ниже команду в консоли диспетчера пакетов (в каталоге, где располагается файл *.csproj):dotnet add package Microsoft.EntityFrameworkCore
После добавления пакета снова запустите приложение и обратите внимание, насколько больше стало файлов в списке. Хотя вы добавили только одну новую ссылку, пакет Microsoft.EntityFrameworkCore
TRUSTED_PLATFORM_ASSEMBLIES.Резюме
В главе была исследована роль библиотек классов .NET Core (файлов *.dll
Вы ознакомились с деталями разнесения типов по пространствам имен .NET Core и отличием между .NET Core и .NET Standard, приступили к конфигурированию приложений и углубились в состав библиотек классов. Затем вы научились публиковать консольные приложения .NET Core. В заключение вы узнали, каким образом пакетировать свои приложения с применением NuGet.
Глава 17
Рефлексия типов, позднее связывание и программирование на основе атрибутов
Как было показано в главе 16, сборки являются базовой единицей развертывания в мире .NET Core. Используя интегрированный браузер объектов Visual Studio (и многих других IDE-сред), можно просматривать типы внутри набора сборок, на которые ссылается проект. Кроме того, внешние инструменты, такие как утилита ildasm.exe
System.Reflection. Таким образом, первой задачей настоящей главы является определение роли рефлексии и потребности в метаданных .NET Core.Остаток главы посвящен нескольким тесно связанным темам, которые вращаются вокруг служб рефлексии. Например, вы узнаете, как клиент .NET Core может задействовать динамическую загрузку и позднее связывание для активизации типов, сведения о которых на этапе компиляции отсутствуют. Вы также научитесь вставлять специальные метаданные в сборки .NET Core за счет использования системных и специальных атрибутов. Для практической демонстрации всех этих аспектов в завершение главы приводится пример построения нескольких "объектов-оснасток", которые можно подключать к расширяемому консольному приложению.
Потребность в метаданных типов