Co nowego na platformie .NET 7
Platforma .NET 7 jest następcą platformy .NET 6 i koncentruje się na ujednoliconym, nowoczesnym, prostym i szybkim. Platforma .NET 7 będzie obsługiwana przez 18 miesięcy jako wersja standardowa (STS) (wcześniej znana jako bieżącej wersji).
W tym artykule wymieniono nowe funkcje platformy .NET 7 i podano linki do bardziej szczegółowych informacji na temat każdego z nich.
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ępowanie na stosie (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"). Metody działające przez dłuższy czas mogą przełączyć się na bardziej zoptymalizowane wersje w trakcie wykonywania.
- Optymalizacja kierowana profilem (PGO) działa teraz z OSR i jest łatwiejsza do włączenia (dodając
<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 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 szybkie uruchamianie oraz niewielkie i niezależne wdrożenie. Na platformie .NET 7 funkcja Native AOT koncentruje się na aplikacjach konsolowych i wymaga optymalizacji aplikacji.
- Ulepszenia wydajności środowiska uruchomieniowego Mono, które obsługuje aplikacje Blazor WebAssembly, Android i iOS.
Aby zapoznać się ze szczegółowymi informacjami na temat wielu funkcji ukierunkowanych na wydajność, które sprawiają, że platforma .NET 7 jest tak szybka, zobacz wpis w blogu Ulepszenia wydajności w programie .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.
- Polimorficzna serializacja dla hierarchii typów zdefiniowanych przez użytkownika. Aby uzyskać więcej informacji, zobacz Serialize właściwości klas pochodnych.
- Obsługa wymaganych elementów członkowskichw ramach
, które stanowią właściwości konieczne w zawartości 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ł Generic math i wpis w blogu Generic math.
Wyrażenia regularne
Biblioteka wyrażeń regularnych platformy .NET odnotowała znaczne ulepszenia funkcji i wydajności w platformie .NET 7.
Nowa opcja RegexOptions.NonBacktracking umożliwia dopasowywanie przy użyciu podejścia, które pozwala uniknąć wycofywania i gwarantuje przetwarzanie w czasie liniowym względem długości danych wejściowych. Mechanizm nonbacktracking nie może być używany w wyszukiwaniu od prawej i ma kilka innych ograniczeń, ale jest szybki dla wszystkich wyrażeń regularnych i danych wejściowych. Aby uzyskać więcej informacji, zobacz tryb bez powrotu.
Generatory źródeł wyrażeń regularnych są nowe. Generatory źródeł tworzą silnik zoptymalizowany pod kątem wzorca w czasie kompilacji, zapewniając korzyści wydajnościowe. Źródło, które jest emitowane, jest częścią projektu, dzięki czemu można go wyświetlać i debugować. Ponadto nowe diagnostyczne alerty
SYSLIB1045
informują o miejscach, w których używasz Regex, co można przekonwertować na generator źródłowy. Aby uzyskać więcej informacji, zobacz generatory kodu źródłowego wyrażeń regularnych platformy .NET .W przypadku wyszukiwania bez uwzględniania wielkości liter platforma .NET 7 zapewnia znaczące poprawy wydajności. Zyski pochodzą, ponieważ określenie parametru RegexOptions.IgnoreCase nie wywołuje już ToLower na każdym znaku we wzorcu i na każdym znaku w wprowadzonych danych. Zamiast tego wszystkie prace związane z wielkością liter są wykonywane podczas konstruowania Regex.
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ń, sprawdź wpis na 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 programowania aplikacji | Więcej informacji |
---|---|---|
Obsługa mikrosekund i nanosekund w typach TimeSpan, TimeOnly, DateTimei DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Nowe przeciążenia konstruktora DateTime - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Nowe przeciążenia konstruktora DateTimeOffset - TimeOnly.Microsecond - TimeOnly.Nanosecond - TimeSpan.Microseconds - TimeSpan.Nanoseconds - TimeSpan.FromMicroseconds(Double) - I inni... |
Te interfejsy API sprawiają, że już nie musisz wykonywać obliczeń na wartości "tick" w celu określenia wartości mikrosekund i nanosekund. Aby uzyskać więcej informacji, zobacz wpis na 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 (wersja zapoznawcza 4) i .NET 7 (wersja zapoznawcza 6). |
Ograniczanie szybkości interfejsów API w celu ochrony zasobu przez utrzymanie ruchu na bezpiecznym poziomie | RateLimiter i inne w pakiecie NuGet System.Threading.RateLimiting | Aby uzyskać więcej informacji, zobacz Ograniczenie szybkości obsługi HTTP w .NET i Ogłoszenie ograniczenia szybkości dla .NET. |
Interfejsy API do odczytywania wszystkich danych z Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read może zwracać mniej danych niż to, co jest dostępne w strumieniu. Nowe metody ReadExactly odczytują dokładnie żądaną liczbę bajtów, a nowe metody ReadAtLeast 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 , TimeOnly , Int128 , UInt128 i Half |
W przestrzeni nazw System.ComponentModel: - 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 na blogu .NET 7 Preview 4. |
Interfejsy API do pobierania i ustawiania uprawnień do plików systemu Unix | wyliczenie - System.IO.UnixFileMode - 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 (wersja zapoznawcza 7). |
Atrybut wskazujący, jakiego rodzaju składnia jest spodziewana w ciągu | StringSyntaxAttribute | Można na przykład określić, że parametr string oczekuje wyrażenia regularnego, przypisując parametr [StringSyntax(StringSyntaxAttribute.Regex)] . |
Interfejsy API umożliwiające współdziałanie z językiem JavaScript podczas uruchamiania w przeglądarce lub w innych architekturach 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 Używanie .NET w dowolnej aplikacji JavaScript w .NET 7. |
Możliwość obserwowania
Platforma .NET 7 wprowadza ulepszenia możliwości obserwowania. Możliwość obserwacji pomaga zrozumieć stan aplikacji w miarę skalowania i zwiększania złożoności technicznej. Implementacja obserwowalności w .NET jest oparta głównie na OpenTelemetry. Ulepszenia obejmują:
- Nowe zdarzenie Activity.CurrentChanged, którego można użyć do wykrycia, gdy kontekst zakresu zarządzanego wątku ulegnie zmianie.
- Nowe, wydajne metody wyliczania właściwości Activity: EnumerateTagObjects(), EnumerateLinks()i EnumerateEvents().
Aby uzyskać więcej informacji, zobacz artykuł na blogu .NET 7 Preview 4.
SDK .NET
Zestaw .NET 7 SDK ulepsza doświadczenie z szablonami w środowisku wiersza polecenia. Umożliwia również publikowanie w kontenerach oraz centralne zarządzanie pakietami za pomocą narzędzia NuGet.
Szablony
Wprowadzono pewne mile widziane ulepszenia polecenia dotnet new
i tworzenia szablonów.
dotnet new
Polecenie wiersza polecenia dotnet new
, które tworzy nowy projekt, plik konfiguracyjny lub rozwiązanie na podstawie szablonu, teraz obsługuje uzupełnianie poleceń do eksplorowania:
- Dostępne nazwy szablonów
- Opcje szablonu
- Dozwolone wartości opcji
Ponadto w celu uzyskania lepszej zgodności install
, uninstall
, search
, list
i podpolecenia update
nie mają już prefiksu --
.
Tworzenie
Szablonowe ograniczenia , stanowiące nową koncepcję dla platformy .NET 7, umożliwiają zdefiniowanie kontekstu, w którym szablony mogą być używane. 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 silnika szablonu (na przykład interfejsu wiersza polecenia platformy .NET lub okna dialogowego Nowy projekt w programie Visual Studio) i zainstalowanych zadań roboczych. 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 szablon web
umożliwia korzystanie z wielu 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 dotnet publish
. Aby uzyskać więcej informacji na temat funkcji, zobacz Ogłoszenie wbudowanej obsługi kontenerów dla zestawu .NET SDK. Aby zapoznać się z samouczkiem, zobacz Containerize a .NET app with 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ć, dodaj plik Directory.Packages.props do katalogu głównego repozytorium. W tym pliku ustaw właściwość MSBuild ManagePackageVersionsCentrally
na true
i dodaj wersje dla wspólnej zależności pakietu przy użyciu elementów PackageVersion
. Następnie w poszczególnych plikach projektu można pominąć Version
atrybuty z dowolnego PackageReference elementów odwołujących się do pakietów zarządzanych centralnie.
Aby uzyskać więcej informacji, zobacz Central package management.
Generacja źródeł 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 w static
metodach partial
, które inicjują generowanie kodu marshalowania podczas kompilacji. Generując kod marshallingu w czasie kompilacji, nie trzeba generować wycinków IL w czasie wykonywania, tak jak w przypadku korzystania z 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 kodu źródłowego dla wywołań platformy i Używanie niestandardowych marshallerów w generowanym kodzie źródłowym 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ólnychmatematycznych, 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 C# 11.
F# 7
Język F# 7 kontynuuje rozwój, aby uczynić język prostszym i usprawnić wydajność oraz współpracę z nowymi funkcjami C#. Aby uzyskać więcej informacji, zobacz Ogłoszenie F# 7.
.NET MAUI
Interfejs użytkownika aplikacji wieloplatformowej .NET (.NET MAUI) to wieloplatformowy framework do tworzenia natywnych aplikacji mobilnych i desktopowych 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.
Formularze systemu Windows
Wiele pracy poszło do systemu Windows Forms dla platformy .NET 7. Wprowadzono ulepszenia w następujących obszarach:
- Dostępność
- Wysoka rozdzielczość DPI i skalowanie
- Powiązanie danych
Aby uzyskać więcej informacji, zobacz Co nowego w formularzach systemu Windows 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 artykuł na blogu Co nowego dla platformy WPF w .NET 7.
Orleans
Orleans to międzyplatformowa struktura do tworzenia niezawodnych, skalowalnych aplikacji rozproszonych. Aby uzyskać informacje na temat najnowszych aktualizacji Orleans, zobacz Migrate from Orleans 3.x to 7.0.
Asystent uaktualniania platformy .NET i coreWCF
Asystent uaktualniania platformy .NET obsługuje teraz uaktualnianie aplikacji WCF po stronie serwera do CoreWCF, który jest portem utworzonym przez społeczność platformy WCF do platformy .NET (Core). Aby uzyskać więcej informacji, zobacz Ulepsz projekt serwera WCF do używania 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 What's new with AutoML and tooling oraz Introducing the ML.NET Text Classification API posty na blogu.
Zobacz też
- Uwagi do wydania dla platformy .NET 7