платформа .NET Framework технологии недоступны в .NET
Некоторые технологии, доступные для платформа .NET Framework библиотек, недоступны для использования с .NET 6+, например домены приложений, удаленное взаимодействие и безопасность доступа к коду (CAS). Если в библиотеках применяются технологии, указанные на этой странице, рассмотрите описанные ранее альтернативные подходы.
Дополнительные сведения о совместимости API см. в статье Критические изменения .NET.
Домены приложений
Домены приложений позволяют изолировать приложения друг от друга. Для этих доменов требуется поддержка среды выполнения, при этом они требовательны к ресурсам. Создание дополнительных доменов приложений не поддерживается, и в будущем эта возможность не планируется. Для изоляции кода используйте в качестве альтернативы отдельные процессы или контейнеры. Для динамической загрузки сборок используйте класс AssemblyLoadContext.
Чтобы упростить миграцию кода из платформа .NET Framework, .NET 6+ предоставляет некоторые AppDomain из поверхностей API. Некоторые API-интерфейсы работают без изменений (например, AppDomain.UnhandledException), одни элементы не выполняют никаких действий (например, SetCachePath), а другие создают исключение PlatformNotSupportedException (например, CreateDomain). Проверьте типы, используемые для System.AppDomain
источника ссылки в репозитории GitHub dotnet/runtime. Убедитесь, что выбрана ветвь, соответствующая реализованной версии.
Удаленное взаимодействие
Удаленное взаимодействие .NET не поддерживается в .NET 6+. Архитектура удаленного взаимодействия .NET считается проблемной. Она используется для обмена данными между доменами приложений, которые больше не поддерживаются. Кроме того, для удаленного взаимодействия требуется поддержка среды выполнения, обслуживание которой обходится дорого.
Для обычного взаимодействия между процессами можно вместо удаленного применять механизмы межпроцессного взаимодействия, например класс System.IO.Pipes или MemoryMappedFile. В более сложных сценариях проект StreamJsonRpc с открытым исходным кодом предоставляет межплатформенные средства удаленного взаимодействия .NET Standard, которые работают поверх существующих потоков или каналов подключения.
Для взаимодействия между компьютерами в качестве альтернативы можно использовать сетевое решение, желательно протокол на основе обычного текста с низкими издержками, например HTTP. Еще один вариант — веб-сервер Kestrel, используемый платформой ASP.NET Core. Кроме того, для сценариев взаимодействия между компьютерами по сети можно использовать пространство имен System.Net.Sockets. StreamJsonRpc, упомянутый выше, можно использовать для обмена данными JSON или binary (через MessagePack) между веб-сокетами.
Другие варианты обмена сообщениями см. в разделе об обмене сообщениями статьи .NET Open Source Developer Projects (Проекты разработки с открытым кодом в .NET).
Так как удаленное взаимодействие не поддерживается, вызовы BeginInvoke()
и EndInvoke()
объекты делегата будут вызываться PlatformNotSupportedException
. Дополнительные сведения см. в разделе "Миграция вызовов делегата BeginInvoke для .NET Core".
Управление доступом для кода
Песочница, которая зависит от среды выполнения или платформы, чтобы ограничить ресурсы, используемые управляемым приложением или библиотекой, не поддерживаются в платформа .NET Framework и поэтому не поддерживаются в .NET 6+. Cas больше не рассматривается как граница безопасности, так как слишком много случаев в платформа .NET Framework и среде выполнения, где происходит повышение привилегий. Кроме того, механизм CAS усложняет реализацию и ухудшает производительность и работоспособность приложений, которые не планируют использовать его.
Чтобы свести к минимуму требуемый набор прав, применяйте ограничения безопасности, предусмотренные в операционной системе, например виртуализацию, контейнеры или учетные записи пользователей.
Прозрачность безопасности
Аналогично CAS, прозрачность безопасности позволяет декларативно отделить изолированный код от кода, критически важного с точки зрения безопасности, но больше не поддерживается как ограничение безопасности. Эта функция часто используется в Silverlight.
Для выполнения процессов с наименьшим набором привилегий используйте границы безопасности, предоставляемые операционной системой, например виртуализацию, контейнеры или учетные записи пользователей.
System.EnterpriseServices
System.EnterpriseServices (COM+) не поддерживается .NET 6+.
Workflow Foundation
Windows Workflow Foundation (WF) не поддерживается в .NET 6+. Дополнительные сведения см. в разделе CoreWF.
Совет
Сервер Windows Communication Foundation (WCF) можно использовать в .NET 6+ с помощью пакетов NuGet CoreWCF. Дополнительные сведения см. в разделе CoreWCF 1.0.
Некоторые api-интерфейсы отражения не поддерживаются
.NET 8 и более ранних версий .NET (Core) не поддерживают сохранение сборок, созданных System.Reflection.Emit API, и AssemblyBuilder.Save метод недоступен. Кроме того, недоступны следующие поля перечисления AssemblyBuilderAccess:
В .NET 9 реализовано PersistedAssemblyBuilder
AssemblyBuilder.Save и метод был добавлен обратно в библиотеку выдачи отражения. Дополнительные сведения об использовании этого API см. в статье System.РефлексияИонный. Класс Emit.PersistedAssemblyBuilder.
Дополнительные сведения о различных реализациях AssemblyBuilder в .NET см. в разделе System.РефлексияИонный. Класс Emit.AssemblyBuilder
Загрузка сборок с несколькими модулями
Сборки, состоящие из нескольких модулей (OutputType=Module
в MSBuild), не поддерживаются в .NET 6+.
В качестве альтернативы рекомендуется объединить отдельные модули в один файл сборки.
Блоки скриптов XSLT
Блоки скриптов XSLT поддерживаются только в платформа .NET Framework. Они не поддерживаются в .NET 6 или более поздней версии.