Co nowego na platformie .NET 7
Platforma .NET 7 jest następcą platformy .NET 6 i koncentruje się na tym, że jest ujednolicony, nowoczesny, prosty i szybki. Platforma .NET 7 będzie obsługiwana przez 18 miesięcy jako wersja standardowa (STS) (wcześniej znana jako bieżąca wersja).
W tym artykule wymieniono nowe funkcje platformy .NET 7 i podano linki do bardziej szczegółowych informacji na temat każdego z nich.
Aby znaleźć wszystkie artykuły platformy .NET, które zostały zaktualizowane dla platformy .NET 7, zobacz Dokumentację platformy .NET: Co nowego w wersji .NET 7.
Wydajność
Wydajność jest kluczowym celem platformy .NET 7, a wszystkie jej funkcje zostały zaprojektowane z myślą o wydajności. Ponadto platforma .NET 7 obejmuje następujące ulepszenia mające na celu wyłącznie wydajność:
- Zastąpienie stosu (OSR) stanowi uzupełnienie kompilacji warstwowej. Umożliwia to środowisku uruchomieniowemu zmianę kodu wykonywanego przez aktualnie uruchomioną metodę w trakcie wykonywania (czyli gdy jest to "na stosie"). Długotrwałe metody mogą przełączyć się na bardziej zoptymalizowane wersje w połowie wykonywania.
- Optymalizacja sterowana profilem (PGO) działa teraz z systemem OSR i jest łatwiejsza (przez dodanie
<TieredPGO>true</TieredPGO>
do pliku projektu). PGO może również instrumentować i optymalizować dodatkowe elementy, takie jak delegaty. - Ulepszona generacja kodu dla arm64.
- Natywna funkcja AOT tworzy autonomiczny plik wykonywalny w formacie pliku platformy docelowej bez zależności zewnętrznych. Jest całkowicie natywny, bez il lub JIT i zapewnia szybki czas uruchamiania i małe, samodzielne wdrożenie. Na platformie .NET 7 natywna funkcja AOT koncentruje się na aplikacjach konsolowych i wymaga przycinania aplikacji.
- Ulepszenia wydajności środowiska uruchomieniowego Mono, które obsługuje aplikacje Blazor WebAssembly, Android i iOS.
Aby uzyskać szczegółowe informacje na temat wielu funkcji ukierunkowanych na wydajność, które sprawiają, że platforma .NET 7 jest tak szybka, zobacz wpis w blogu Ulepszenia wydajności na platformie .NET 7 .
Serializacja System.Text.Json
Platforma .NET 7 zawiera ulepszenia serializacji System.Text.Json w następujących obszarach:
- Dostosowywanie kontraktu zapewnia większą kontrolę nad tym, jak typy są serializowane i deserializowane. Aby uzyskać więcej informacji, zobacz Dostosowywanie kontraktu JSON.
- Serializacja polimorficzna dla hierarchii typów zdefiniowanych przez użytkownika. Aby uzyskać więcej informacji, zobacz Serializowanie właściwości klas pochodnych.
- Obsługa wymaganych elementów członkowskich, które są właściwościami, które muszą znajdować się w ładunku JSON, aby deserializacja powiodła się. Aby uzyskać więcej informacji, zobacz Wymagane właściwości.
Aby uzyskać informacje o tych i innych aktualizacjach, zobacz wpis w blogu Co nowego w pliku System.Text.Json na platformie .NET 7 .
Ogólna matematyka
Platformy .NET 7 i C# 11 obejmują innowacje, które umożliwiają ogólne wykonywanie operacji matematycznych — czyli bez konieczności znajomości dokładnego typu, z którym pracujesz. Jeśli na przykład chcesz napisać metodę, która dodaje dwie liczby, wcześniej trzeba było dodać przeciążenie metody dla każdego typu. Teraz możesz napisać pojedynczą, ogólną metodę, w której parametr typu jest ograniczony do typu przypominającego liczbę. Aby uzyskać więcej informacji, zobacz artykuł Ogólne matematyki i wpis w blogu Ogólne matematyki .
Wyrażenia regularne
. Biblioteka wyrażeń regularnych platformy NET odnotowała znaczne ulepszenia funkcjonalności i wydajności na platformie .NET 7:
Nowa opcja RegexOptions.NonBacktracking umożliwia dopasowywanie przy użyciu podejścia, które pozwala uniknąć wycofywania i gwarantuje przetwarzanie liniowe w czasie trwania danych wejściowych. Aparat nonbacktracking nie może być używany w wyszukiwaniu od prawej do lewej i ma kilka innych ograniczeń, ale jest szybki dla wszystkich wyrażeń regularnych i danych wejściowych. Aby uzyskać więcej informacji, zobacz Tryb nonbacktracking.
Generatory źródeł wyrażeń regularnych są nowe. Generatory źródeł tworzą aparat zoptymalizowany pod kątem wzorca w czasie kompilacji, zapewniając korzyści z wydajności przepływności. Źródło, które jest emitowane, jest częścią projektu, dzięki czemu można go wyświetlać i debugować. Ponadto nowe alerty diagnostyczne
SYSLIB1045
generatora źródła umożliwiają konwersję do Regex generatora źródłowego. Aby uzyskać więcej informacji, zobacz Generatory źródeł wyrażeń regularnych platformy .NET.W przypadku wyszukiwania bez uwzględniania wielkości liter platforma .NET 7 obejmuje duże wzrosty wydajności. Zyski pochodzą, ponieważ określenie RegexOptions.IgnoreCase nie wywołuje ToLower już każdego znaku we wzorcu i na każdym znaku w danych wejściowych. Zamiast tego wszystkie prace związane z wielkością liter są wykonywane podczas Regex konstruowania.
Regex obsługuje teraz zakresy dla niektórych interfejsów API. W ramach tej obsługi dodano następujące nowe metody:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (i kilka innych przeciążeń)
Aby uzyskać więcej informacji na temat tych i innych ulepszeń, zobacz wpis w blogu Ulepszenia wyrażeń regularnych na platformie .NET 7 .
Biblioteki platformy .NET
Wprowadzono wiele ulepszeń interfejsów API biblioteki platformy .NET. Niektóre z nich zostały wymienione w innych, dedykowanych sekcjach tego artykułu. Niektóre inne zostały podsumowane w poniższej tabeli.
opis | Interfejsy API | Więcej informacji |
---|---|---|
Obsługa mikrosekund i nanosekund w TimeSpantypach , TimeOnly, DateTimei DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Nowe DateTime przeciążenia konstruktora - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Nowe DateTimeOffset przeciążenia konstruktora - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) - I inni... |
Te interfejsy API oznaczają, że nie trzeba już wykonywać obliczeń na wartości "znacznika" w celu określenia wartości mikrosekund i nanosekund. Aby uzyskać więcej informacji, zobacz wpis w blogu .NET 7 Preview 4 . |
Interfejsy API do odczytywania, zapisywania, archiwizowania i wyodrębniania archiwów Tar | System.Formats.Tar | Aby uzyskać więcej informacji, zobacz wpisy w blogu .NET 7 Preview 4 i .NET 7 Preview 6 . |
Ograniczanie szybkości interfejsów API w celu ochrony zasobu przez utrzymanie ruchu na bezpiecznym poziomie | RateLimiteri inne w pakiecie NuGet System.Threading.RateLimiting | Aby uzyskać więcej informacji, zobacz Rate limit an HTTP handler in .NET and Announcing rate limiting for .NET (Ograniczanie szybkości obsługi HTTP na platformie .NET ) i Announcing rate limiting for .NET (Ograniczanie szybkości dla platformy .NET). |
Interfejsy API do odczytywania wszystkich danych z elementu Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read może zwracać mniej danych niż to, co jest dostępne w strumieniu. Nowe ReadExactly metody odczytują dokładnie żądaną liczbę bajtów, a nowe ReadAtLeast metody odczytują co najmniej liczbę żądanych bajtów. Aby uzyskać więcej informacji, zobacz wpis w blogu .NET 7 Preview 5 . |
Nowe konwertery typów dla DateOnly , , Int128 TimeOnly , UInt128 iHalf |
System.ComponentModel W przestrzeni nazw: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Konwertery typów są często używane do konwertowania typów wartości na i z ciągu. Te nowe interfejsy API dodają konwertery typów dla typów, które zostały ostatnio dodane. |
Obsługa metryk dla IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() umożliwia śledzenie statystyk dla co najmniej jednej pamięci podręcznej pamięci za pomocą liczników zdarzeń lub interfejsów API metryk. Aby uzyskać więcej informacji, zobacz wpis w blogu .NET 7 Preview 4 . |
Interfejsy API do pobierania i ustawiania uprawnień do plików systemu Unix | - System.IO.UnixFileMode Enum - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Aby uzyskać więcej informacji, zobacz wpis w blogu .NET 7 Preview 7 . |
Atrybut wskazujący, jakiego rodzaju składnia jest oczekiwana w ciągu | StringSyntaxAttribute | Można na przykład określić, że string parametr oczekuje wyrażenia regularnego, przypisując parametr za pomocą [StringSyntax(StringSyntaxAttribute.Regex)] polecenia . |
Interfejsy API umożliwiające współdziałanie z językiem JavaScript podczas uruchamiania w przeglądarce lub w innych architekturach zestawu WebAssembly | System.Runtime.InteropServices.JavaScript | Aplikacje Języka JavaScript mogą używać rozszerzonej obsługi zestawu WebAssembly na platformie .NET 7 do ponownego użycia bibliotek platformy .NET z poziomu języka JavaScript. Aby uzyskać więcej informacji, zobacz Use .NET from any JavaScript app in .NET 7 (Używanie platformy .NET z dowolnej aplikacji JavaScript na platformie .NET 7). |
Wgląd w informacje
Platforma .NET 7 wprowadza ulepszenia w celu obserwowania. Możliwość obserwacji pomaga zrozumieć stan aplikacji w miarę skalowania i zwiększania złożoności technicznej. . Implementacja możliwości obserwacji platformy NET jest oparta głównie na technologii OpenTelemetry. Ulepszenia obejmują:
- Nowe Activity.CurrentChanged zdarzenie, którego można użyć do wykrywania, kiedy zmienia się kontekst zakresu zarządzanego wątku.
- Nowe, wydajne metody wyliczania właściwości Activity : EnumerateTagObjects(), EnumerateLinks()i EnumerateEvents().
Aby uzyskać więcej informacji, zobacz wpis w blogu .NET 7 Preview 4 .
Zestaw SDK platformy .NET
Zestaw .NET 7 SDK usprawnia środowisko szablonu interfejsu wiersza polecenia. Umożliwia również publikowanie w kontenerach oraz centralne zarządzanie pakietami za pomocą narzędzia NuGet.
Szablony
Niektóre mile widziane ulepszenia zostały wprowadzone w dotnet new
poleceniu i do tworzenia szablonów.
dotnet new
Polecenie dotnet new
interfejsu wiersza polecenia, które tworzy nowy projekt, plik konfiguracji lub rozwiązanie na podstawie szablonu, obsługuje teraz uzupełnianie kart do eksplorowania:
- Dostępne nazwy szablonów
- Opcje szablonów
- Dozwolone wartości opcji
Ponadto, aby uzyskać lepszą zgodność, install
podpolecenia , uninstall
, search
, list
i update
nie mają już prefiksu --
.
Tworzenie
Ograniczenia szablonu, nowa koncepcja dla platformy .NET 7, umożliwiają zdefiniowanie kontekstu, w którym szablony są dozwolone. Ograniczenia pomagają aparatowi szablonów określić, które szablony powinny być wyświetlane w poleceniach, takich jak dotnet new list
. Szablon można ograniczyć do systemu operacyjnego, hosta aparatu szablonu (na przykład interfejsu wiersza polecenia platformy .NET lub okna dialogowego Nowy projekt w programie Visual Studio) i zainstalowanego obciążenia. Ograniczenia są definiowane w pliku konfiguracji szablonu.
Ponadto w pliku konfiguracji szablonu można teraz dodawać adnotacje do parametru szablonu jako zezwalające na wiele wartości. Na przykład web
szablon zezwala na wiele form uwierzytelniania.
Aby uzyskać więcej informacji, zobacz wpis w blogu .NET 7 Preview 6 .
Publikowanie w kontenerze
Kontenery to jeden z najprostszych sposobów dystrybuowania i uruchamiania szerokiej gamy aplikacji i usług w chmurze. Obrazy kontenerów są teraz obsługiwanym typem danych wyjściowych zestawu .NET SDK i można tworzyć konteneryzowane wersje aplikacji przy użyciu polecenia dotnet publish
. Aby uzyskać więcej informacji na temat funkcji, zobacz Ogłoszenie wbudowanej obsługi kontenerów dla zestawu SDK platformy .NET. Aby zapoznać się z samouczkiem, zobacz Containerize a .NET app with dotnet publish (Konteneryzowanie aplikacji .NET za pomocą polecenia dotnet publish).
Centralne zarządzanie pakietami
Teraz można zarządzać typowymi zależnościami w projektach z jednej lokalizacji przy użyciu funkcji centralnego zarządzania pakietami (CPM) nuGet. Aby ją włączyć, należy dodać plik Directory.Packages.props do katalogu głównego repozytorium. W tym pliku ustaw właściwość ManagePackageVersionsCentrally
MSBuild na true
i dodaj wersje dla wspólnej zależności pakietu przy użyciu PackageVersion
elementów. Następnie w pojedynczych plikach projektu można pominąć Version
atrybuty z dowolnych elementów PackageReference odwołujących się do pakietów zarządzanych centralnie.
Aby uzyskać więcej informacji, zobacz Centralne zarządzanie pakietami.
Generowanie źródła P/Invoke
Platforma .NET 7 wprowadza generator źródła dla wywołań platformy (P/Invokes) w języku C#. Generator źródła szuka LibraryImportAttribute metod w metodzie static
, partial
aby wyzwolić generowanie źródła czasu kompilacji kodu marshallingu. Generując kod marshallingu w czasie kompilacji, nie trzeba generować wycinków IL w czasie wykonywania, tak jak w przypadku używania polecenia DllImportAttribute. Generator źródła poprawia wydajność aplikacji, a także umożliwia skompilowanie aplikacji przed czasem (AOT). Aby uzyskać więcej informacji, zobacz Generowanie źródła dla wywołań platformy i Używanie niestandardowych marshallerów w źródłowych wywołaniach P/Invoke.
Powiązane wersje
Ta sekcja zawiera informacje o powiązanych produktach, które mają wydania zgodne z wersją platformy .NET 7.
Visual Studio 2022 w wersji 17.4
Aby uzyskać więcej informacji, zobacz Co nowego w programie Visual Studio 2022.
C# 11
Język C# 11 obejmuje obsługę ogólnych literałów matematycznych, nieprzetworzonych literałów ciągów, typów o zakresie plików i innych nowych funkcji. Aby uzyskać więcej informacji, zobacz Co nowego w języku C# 11.
F# 7
Język F# 7 kontynuuje podróż, aby język był prostszy i usprawnił wydajność i współdziałanie z nowymi funkcjami języka C#. Aby uzyskać więcej informacji, zobacz Ogłoszenie języka F# 7.
.NET MAUI
Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) to międzyplatformowa platforma do tworzenia natywnych aplikacji mobilnych i klasycznych przy użyciu języków C# i XAML. Łączy on interfejsy API systemów Android, iOS, macOS i Windows w jednym interfejsie API. Aby uzyskać informacje o najnowszych aktualizacjach, zobacz Co nowego w programie .NET MAUI dla platformy .NET 7.
ASP.NET Core
ASP.NET Core 7.0 zawiera oprogramowanie pośredniczące ograniczające szybkość, ulepszenia minimalnych interfejsów API i transkodowanie JSON gRPC. Aby uzyskać informacje o wszystkich aktualizacjach, zobacz Co nowego w programie ASP.NET Core 7.
EF Core
Program Entity Framework Core 7.0 obejmuje niezależną od dostawcy obsługę kolumn JSON, lepszą wydajność zapisywania zmian i niestandardowe szablony inżynierii odwrotnej. Aby uzyskać informacje o wszystkich aktualizacjach, zobacz Co nowego w programie EF Core 7.0.
Windows Forms
Wiele pracy poszło do systemu Windows Forms dla platformy .NET 7. Wprowadzono ulepszenia w następujących obszarach:
- Ułatwienia dostępu
- Wysoka rozdzielczość DPI i skalowanie
- Powiązanie danych
Aby uzyskać więcej informacji, zobacz Co nowego w formularzach Windows Forms na platformie .NET 7.
WPF
WPF na platformie .NET 7 zawiera liczne poprawki błędów, a także ulepszenia wydajności i ułatwień dostępu. Aby uzyskać więcej informacji, zobacz wpis w blogu Co nowego dla platformy WPF na platformie .NET 7 .
Orleans
Orleans to międzyplatformowa struktura do tworzenia niezawodnych, skalowalnych aplikacji rozproszonych. Aby uzyskać informacje o najnowszych aktualizacjach programu Orleans, zobacz Migrowanie z Orleans wersji 3.x do wersji 7.0.
Asystent uaktualniania platformy .NET i coreWCF
Asystent uaktualniania platformy .NET obsługuje teraz uaktualnianie aplikacji WCF po stronie serwera do platformy CoreWCF, która jest portem utworzonym przez społeczność platformy WCF do platformy .NET (Core). Aby uzyskać więcej informacji, zobacz Uaktualnianie projektu po stronie serwera WCF do korzystania z coreWCF.
ML.NET
ML.NET teraz zawiera interfejs API klasyfikacji tekstu, który ułatwia trenowanie niestandardowych modeli klasyfikacji tekstu przy użyciu najnowszych najnowocześniejszych technik uczenia głębokiego. Aby uzyskać więcej informacji, zobacz wpisy w blogu What's new with AutoML and Tooling (Co nowego w przypadku automatycznego uczenia maszynowego i narzędzi) oraz Introducing the ML.NET Text Classification API (Wprowadzenie do ML.NET interfejsu API klasyfikacji tekstu).