Почему Microsoft вернула AppDomain в .NET Core 3.0? - PullRequest
0 голосов
/ 17 октября 2019

Из памяти Microsoft забрала AppDomain, и этот механизм был отключен.

Теперь я неожиданно обнаружил, что AppDomain вернулся:

Сборочная система. Runtime.Extensions, версия = 4.2.1.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a \ dotnet \ packs \ Microsoft.NETCore.App.Ref \ 3.0.0 \ ref \ netcoreapp3.0 \ System.Runtime.Extensions.dll

сборка содержит класс AppDomain.

Вот мой вопрос: почему?

1 Ответ

1 голос
/ 17 октября 2019

Портирование на .NET Core

Почему оно было прекращено ? Домены приложений требуют поддержки во время выполнения и, как правило, довольно дороги. Хотя он по-прежнему реализован в CoreCLR, он недоступен в .NET Native, и мы не планируем добавлять туда эту возможность.

Что мне следует использовать вместо этого? Домены приложений использовались для различных целей. Для изоляции кода мы рекомендуем процессы и / или контейнеры. Для динамической загрузки сборок мы рекомендуем новый класс AssemblyLoadContext.

Кроме того

Конечно, только потому, что что-то не такДоступный в .NET Core сегодня не означает, что мы прекратили его . В большинстве случаев это просто означает, что у нас не было времени, чтобы выяснить, имеет ли смысл переносить порт или нет, что он не подходит для моделей приложений, предлагаемых в настоящее время .NET Core. Таким образом, это область, в которой мы очень заинтересованы в получении ваших отзывов.

Так что же на самом деле поддерживается?

AppDomain Class

В .NET Core реализация AppDomain ограничена конструкцией и не обеспечивает изоляции, выгрузки или границ безопасности. Для .NET Core существует ровно один домен приложений. Изоляция и выгрузка осуществляются через AssemblyLoadContext. Границы безопасности должны обеспечиваться границами процессов и соответствующими методами удаленного взаимодействия.

Он существует для определенных задач, однако во многих отношениях он не поддерживается.

Относится к

.NET Core

  • 3.0 2.2 2.1 2.0

.NET Framework

  • 4.8 4.7.2 4.7.1 4.7 4.6.2 4.6.1 4.6 4.5.2 4.5.1 4.5 4.0 3.5 3.0 2.0 1.1

. NET Standard

  • 2.1 2.0

Так что произойдет, если вы используете что-то, что не поддерживается?

Его либо нет, либо вы получаете большое неприятное явление throw new NotSupportedException или PlatformNotSupportedException в зависимости от того, где и почему

Дальнейшее чтение

...