Поделиться через


Технологии .NET Framework недоступны в .NET

Некоторые технологии, доступные для библиотек .NET Framework, недоступны для использования с .NET 6+, например домены приложений, удаленное взаимодействие и безопасность доступа к коду (CAS). Если библиотеки используют одну или несколько технологий, перечисленных на этой странице, рассмотрите альтернативные подходы, упомянутые на этой странице.

Дополнительные сведения о совместимости API см. в статье Критические изменения в .NET.

Домены приложений

Домены приложений (AppDomains) изолируют приложения друг от друга. Домены приложений требуют поддержки среды выполнения и являются ресурсоемкими. Создание дополнительных доменов приложений не поддерживается и в будущем не планируется добавлять эту возможность. Для изоляции кода используйте отдельные процессы или контейнеры в качестве альтернативы. Для динамической загрузки сборок используйте класс AssemblyLoadContext.

Чтобы упростить миграцию кода из .NET Framework, .NET 6+ предоставляет некоторые из поверхностей API AppDomain. Некоторые API работают нормально (например, AppDomain.UnhandledException), некоторые члены ничего не делают (например, SetCachePath), а некоторые из них выбрасывают PlatformNotSupportedException (например, CreateDomain). Проверьте типы, которые вы используете для System.AppDomain ссылочного источникав репозитории dotnet/runtime GitHub. Обязательно выберите ветвь, соответствующую реализованной версии.

Удаленное взаимодействие

Удаленное взаимодействие .NET не поддерживается в .NET 6+. .NET Remoting рассматривалось как проблематичная архитектура. Он используется для обмена данными между доменами приложений, которые больше не поддерживаются. Кроме того, для удаленного взаимодействия требуется поддержка среды выполнения, которая является дорогой для обслуживания.

Для простого общения между процессами рассмотрим механизмы взаимодействия между процессами (IPC) в качестве альтернативы удаленной связи, например классу System.IO.Pipes или классу MemoryMappedFile. Для более сложных сценариев проект с открытым исходным кодом StreamJsonRpc предоставляет кроссплатформенную платформу удаленного управления .NET Standard, которая работает поверх существующих подключений потока или канала.

На компьютерах используйте сетевое решение в качестве альтернативы. Предпочтительнее использовать протокол обычного текста с низкой нагрузкой, например HTTP. веб-серверKestrel, используемый в ASP.NET Core, является здесь одним из вариантов. Кроме того, рассмотрите возможность использования System.Net.Sockets для сетевых сценариев, охватывающих несколько машин. StreamJsonRpc, упомянутый ранее, можно использовать для обмена данными JSON или двоичного файла (через MessagePack) через веб-сокеты.

Дополнительные варианты обмена сообщениями см. в проектах разработчиков с открытым исходным кодом .NET: Обмен Сообщениями.

Так как удаленное взаимодействие не поддерживается, вызовы BeginInvoke() и EndInvoke() для объектов делегата будут вызывать PlatformNotSupportedException. Дополнительные сведения см. в разделе Миграция вызовов делегата BeginInvoke для.NET Core.

Безопасность доступа к коду (CAS)

Песочница, которая использует среду выполнения или фреймворк для ограничения ресурсов управляемого приложения или библиотеки, не поддерживается в .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) не поддерживают сохранение сборок, созданных api-интерфейсами System.Reflection.Emit, и метод AssemblyBuilder.Save недоступен. Кроме того, недоступны следующие поля перечисления AssemblyBuilderAccess:

В .NET 9 внедрена PersistedAssemblyBuilder, а метод AssemblyBuilder.Save был добавлен обратно в библиотеку Reflection.Emit. Дополнительные сведения об использовании этого API см. в класса System.Reflection.Emit.PersistedAssemblyBuilder.

Дополнительные сведения о различных реализациях AssemblyBuilder в .NET см. в классе System.Reflection.Emit.AssemblyBuilder.

Загрузка сборок с несколькими модулями

Сборки, состоящие из нескольких модулей (OutputType=Module в MSBuild), не поддерживаются в .NET 6+.

В качестве альтернативы рекомендуется объединить отдельные модули в один файл сборки.

Блоки скриптов XSLT

Блоки скриптов XSLT поддерживаются только в .NET Framework. Они не поддерживаются в .NET 6 или более поздней версии.

См. также