Technologie .NET Framework są niedostępne na platformie .NET

Kilka technologii dostępnych dla bibliotek .NET Framework nie jest dostępnych do użycia z platformą .NET 6 lub nowszym, takich jak domeny aplikacji, komunikacja zdalna i zabezpieczenia dostępu kodu (CAS). Jeśli biblioteki opierają się na co najmniej jednej technologii wymienionej na tej stronie, rozważ wymienione alternatywne podejścia.

Aby uzyskać więcej informacji na temat zgodności interfejsu API, zobacz Istotne zmiany na platformie .NET.

Domeny aplikacji

Domeny aplikacji (AppDomains) izolują aplikacje od siebie. Domeny aplikacji wymagają obsługi środowiska uruchomieniowego i są kosztowne dla zasobów. Tworzenie większej liczby domen aplikacji nie jest obsługiwane i nie ma planów dodania tej funkcji w przyszłości. W przypadku izolacji kodu użyj oddzielnych procesów lub kontenerów jako alternatywy. Aby dynamicznie ładować zestawy, użyj AssemblyLoadContext klasy .

Aby ułatwić migrację kodu z programu .NET Framework, platforma .NET 6+ uwidacznia niektóre powierzchnie interfejsu AppDomain API. Niektóre interfejsy API działają normalnie (na AppDomain.UnhandledExceptionprzykład ), niektóre elementy członkowskie nie robią nic (na przykład ), a niektóre z nich zgłaszają PlatformNotSupportedException (na przykład SetCachePathCreateDomain). Sprawdź typy używane względem źródła referencyjnego System.AppDomain w repozytorium GitHub dotnet/runtime. Upewnij się, że wybrano gałąź zgodną z zaimplementowaną wersją.

Usług zdalnych

Komunikacja zdalna platformy .NET nie jest obsługiwana na platformie .NET 6+. Komunikacja zdalna platformy .NET została zidentyfikowana jako problematyczna architektura. Służy do komunikowania się między domenami aplikacji, które nie są już obsługiwane. Ponadto komunikacja zdalna wymaga obsługi środowiska uruchomieniowego, która jest kosztowna do utrzymania.

W przypadku prostej komunikacji między procesami należy rozważyć mechanizmy komunikacji między procesami (IPC) jako alternatywę dla komunikacji z komunikacją zdalną, taką jak System.IO.Pipes klasa lub MemoryMappedFile klasa. W przypadku bardziej złożonych scenariuszy projekt StreamJsonRpc typu open source udostępnia międzyplatformową platformę komunikacji wirtualnej .NET Standard, która działa na podstawie istniejących połączeń strumieniowych lub potokowych.

Na różnych maszynach można użyć rozwiązania opartego na sieci jako alternatywy. Najlepiej, należy użyć protokołu zwykłego tekstu niskiego obciążenia, takiego jak HTTP. Serwer internetowy Kestrel, który jest serwerem internetowym używanym przez ASP.NET Core, jest tutaj opcją. Należy również rozważyć użycie System.Net.Sockets scenariuszy opartych na sieci, między maszynami. Usługa StreamJsonRpc, o której wspomniano wcześniej, może służyć do komunikacji w formacie JSON lub binarnym (za pośrednictwem pakietu MessagePack) za pośrednictwem gniazd internetowych.

Aby uzyskać więcej opcji obsługi komunikatów, zobacz Projekty deweloperów open source platformy .NET: obsługa komunikatów.

Ponieważ komunikacja zdalna nie jest obsługiwana, wywołania obiektów BeginInvoke() delegowanych i EndInvoke() na obiektach delegowanych będą zgłaszać wyjątek PlatformNotSupportedException. Aby uzyskać więcej informacji, zobacz Migrating Delegate BeginInvoke Calls for .NET Core (Migrowanie delegata BeginInvoke Calls for .NET Core).

Zabezpieczenia dostępu kodu (CAS)

Piaskownica, która opiera się na środowisku uruchomieniowym lub strukturze w celu ograniczenia zasobów używanych lub uruchamianych przez zarządzaną aplikację lub bibliotekę, nie jest obsługiwana w programie .NET Framework i dlatego nie jest również obsługiwana na platformie .NET 6+. Usługa CAS nie jest już traktowana jako granica zabezpieczeń, ponieważ istnieje zbyt wiele przypadków w programie .NET Framework i środowisku uruchomieniowym, w którym występuje podniesienie uprawnień. Ponadto usługa CAS sprawia, że implementacja jest bardziej skomplikowana i często ma implikacje dotyczące wydajności poprawności dla aplikacji, które nie zamierzają jej używać.

Używaj granic zabezpieczeń udostępnianych przez system operacyjny, takich jak wirtualizacja, kontenery lub konta użytkowników, na potrzeby uruchamiania procesów z minimalnym zestawem uprawnień.

Przejrzystość zabezpieczeń

Podobnie jak w przypadku cas, przezroczystość zabezpieczeń oddziela kod w trybie piaskownicy od kodu krytycznego pod względem zabezpieczeń w sposób deklaratywny, ale nie jest już obsługiwany jako granica zabezpieczeń. Ta funkcja jest intensywnie używana przez program Silverlight.

Aby uruchamiać procesy z najmniejszym zestawem uprawnień, należy użyć granic zabezpieczeń udostępnianych przez system operacyjny, takich jak wirtualizacja, kontenery lub konta użytkowników.

System.enterpriseservices

System.EnterpriseServices (COM+) nie jest obsługiwany przez platformę .NET 6+.

Podstawy przepływu pracy

Program Windows Workflow Foundation (WF) nie jest obsługiwany na platformie .NET 6+. Aby uzyskać alternatywę, zobacz CoreWF.

Napiwek

Serwer Windows Communication Foundation (WCF) może być używany na platformie .NET 6+ przy użyciu pakietów NuGet CoreWCF. Aby uzyskać więcej informacji, zobacz CoreWCF 1.0 został wydany.

Niektóre interfejsy API emisji odbicia nie są obsługiwane

Platforma .NET 8 i starsze wersje platformy .NET (Core) nie obsługują zapisywania zestawów generowanych przez System.Reflection.Emit interfejsy API, a AssemblyBuilder.Save metoda nie jest dostępna. Ponadto następujące pola AssemblyBuilderAccess wyliczenia nie są dostępne:

W programie .NET 9 zaimplementowano element , a PersistedAssemblyBuilderAssemblyBuilder.Save metoda została dodana z powrotem do biblioteki emitowania odbicia. Aby dowiedzieć się więcej o sposobie korzystania z tego interfejsu API, zobacz System.EmocjeJonów. Emit.AssemblyBuilder, klasa.

Aby uzyskać więcej informacji, zobacz dotnet/runtime issue 15704( Problem 15704).

Ładowanie zestawów z wieloma modułami

Zestawy składające się z wielu modułów (OutputType=Module w programie MSBuild) nie są obsługiwane w programie .NET 6+.

Alternatywnie rozważ scalenie poszczególnych modułów z jednym plikiem zestawu.

Bloki skryptów XSLT

Bloki skryptów XSLT są obsługiwane tylko w programie .NET Framework. Nie są one obsługiwane na platformie .NET 6 lub nowszym.

Zobacz też