Firma Microsoft zaprezentowała wydanie otwartej platformy .NET 8, stworzonej dzięki unifikacji produktów .NET Framework, .NET Core i Mono. Na bazie .NET 8 można tworzyć wieloplatformowe aplikacje za pomocą jednolitych bibliotek i wspólnego procesu budowy, które nie zależą od typu aplikacji, zarówno dla przeglądarek, systemów chmurowych, komputerów stacjonarnych, urządzeń IoT, jak i platform mobilnych. Pakiety .NET SDK 8, .NET Runtime 8 i ASP.NET Core Runtime 8 są dostępne dla systemów Linux, macOS i Windows. .NET Desktop Runtime 8 jest dostarczany tylko dla systemu Windows. Związane z projektem materiały są publikowane na licencji MIT. Gałąź .NET 8 została zakwalifikowana jako LTS i będzie wspierana przez trzy lata do listopada 2026 roku.
.NET 8 zawiera Runtime z JIT-kompilatorem RyuJIT, specyfikacje API, biblioteki WPF, Windows Forms, WinUI, Entity Framework, interfejs wiersza poleceń dotnet, a także narzędzia do tworzenia mikroserwisów, bibliotek oraz aplikacji serwerowych, graficznych i konsolowych. Oddzielnie opublikowano stos do tworzenia aplikacji webowych ASP.NET Core 8.0, warstwę ORM Entity Framework Core 8.0 (z sterownikami, w tym dla SQLite i PostgreSQL), bibliotekę WPF 8 (Windows Presentation Foundation), framework Windows Forms 8 do tworzenia GUI, platformę Aspire 8 do budowy aplikacji Cloud Native, framework MAUI 8 do tworzenia wieloplatformowych interfejsów użytkownika oraz wydania języków C# 12 i F# 8. Wsparcie dla .NET 8.0 i C# 12 jest dostępne w darmowym edytorze kodu Visual Studio Code.
Cechy nowego wydania:
- Przeprowadzono znaczną optymalizację wydajności. Domyślnie włączono nowy generator kodu, wspierający dynamiczną optymalizację na podstawie profilowania wykonania kodu (Dynamic Profile-Guided Optimization). Użycie nowego generatora kodu zapewnia wzrost wydajności aplikacji o 20%. Ponadto, w nowej wersji dodano wsparcie dla instrukcji AVX-512, co pozwala na zwiększenie wydajności operacji równoległych na danych wektorowych. Dla typów podstawowych wprowadzono nowy interfejs, który pozwala bezpośrednio, bez ponownego kodowania, analizować i formatować dane w formacie UTF-8. W testach TechEmpower wydajność pracy z API JSON wzrosła o 18%, a z Fortunes o 24%.

- Dodano nowe stos .NET Aspire, zaprojektowane do tworzenia aplikacji chmurowych (cloud-native) z użyciem technologii .NET. W .NET Aspire dostępny jest szeroki zestaw komponentów, które mogą być potrzebne przy budowie aplikacji działających w środowiskach chmurowych, w tym narzędzia do zbierania telemetrii, konfiguracji, testowania i zapewnienia odporności na awarie.
- Rozszerzono narzędzia do pakowania aplikacji w izolowane kontenery. Domyślnie zapewniona jest publikacja obrazów kontenerów bez Dockerfile i bez użytkownika root. Zredukowano rozmiar podstawowego obrazu kontenera z komponentami platformy .NET. Dodano minimalistyczną wersję obrazu do uruchamiania aplikacji skompilowanych do plików wykonywalnych (Native AOT). Dodano bardziej zabezpieczoną wersję obrazów opartych na Chiseled Ubuntu.
- Zwiększono efektywność kompilacji w samodzielne pliki wykonywalne (Native AOT), w których cały projekt jest początkowo kompilowany do kodu maszynowego docelowej platformy bez użycia kodu pośredniego i bez zastosowania JIT.

- Rozszerzono możliwości interfejsów programowania aplikacji (API), które można wykorzystać w systemach uczenia maszynowego. Na przykład, w bibliotece System.Numerics zwiększono kompatybilność z generatywnymi systemami AI. Dodano przykłady dotyczące świadomych chatbotów, generowania treści oraz dostępu do usług Azure AI.
- W Blazor, platformie do tworzenia aplikacji webowych w języku C#, skrócono czas ładowania stron, zwiększono skalowalność oraz zezwolono na użycie zarówno Blazor Server, jak i Blazor WebAssembly w jednej aplikacji do tworzenia oprogramowania łączącego funkcje serwera klienta. Dodano Jiterpreter, nowy szybszy runtime WebAssembly, który umożliwił przyspieszenie renderowania interfejsu o 20%. Rozszerzone możliwości uwierzytelniania, autoryzacji oraz identyfikacji.
- Rozszerzono framework MAUI do tworzenia wieloplatformowych interfejsów użytkownika, który umożliwia użycie jednej bazy kodu do budowy interfejsów dla Windows, macOS, iOS i Android. Dodano eksperymentalne wsparcie dla kompilacji (Native AOT). Dodano wsparcie dla platform Xcode 15 i Android API 34. Udoskonalone elementy graficzne i przyciski, poprawiono obsługę kliknięć myszy oraz zdarzeń z klawiatury.
- W języku C# 12 dodano wsparcie dla uproszczonej składni do tworzenia konstruktorów podstawowych w dowolnych klasach i strukturach, a także uproszczono tworzenie tablic, span oraz innych typów kolekcji. Udostępniono mechanizmy do ustawiania wartości domyślnych dla parametrów wyrażeń lambda. Uproszczono obsługę opcjonalnych argumentów. Dodano możliwość tworzenia aliasów dla dowolnych typów za pomocą dyrektywy „alias”. // Tworzenie listy List a = [1, 2, 3, 4, 5, 6, 7, 8]; // Tworzenie tablic span Span b = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘h’, ‘i’]; // Użyj operatora rozprzestrzeniania do konkatenacji int[] array1 = [1, 2, 3]; int[] array2 = [4, 5, 6]; int[] array3 = [7, 8, 9]; int[] fullArray = [..array1, ..array2, ..array3]; // zawartość będzie [1, 2, 3, 4, 5, 6, 7, 8, 9]
- W ASP.NET Core dla aplikacji jednostronicowych (SPA) oraz aplikacji webowych (Blazor) wprowadzono wsparcie dla uwierzytelniania opartego na Cookie i tokenach. Zaproponowano nowy interfejs użytkownika do przeprowadzania uwierzytelnienia. Wzmocniono ochronę przed atakami XSRF/CSRF.
- W Entity Framework Core wprowadzono nowe złożone typy, które można stosować jako obiekty. Dodano wsparcie dla danych hierarchicznych w SQL Server.
- W menedżerze pakietów NuGet uproszczono audyt pakietów w projektach i zapewniono informowanie o znanych podatnościach.
- W .NET Runtime dodano tryb kompilacji wyprzedzającej (AOT) dla platform WebAssembly (WASM) i Android.
- WPF dodano dialog otwierania katalogu (OpenFolderDialog) i włączono wsparcie dla przyspieszenia sprzętowego w RDP.
- Znacząco poprawiono wsparcie dla architektury ARM64 i zwiększono jakość kodu dla ARM.
- W debugerze dodano wyświetlanie podsumowujących danych debugujących oraz wprowadzono uproszczone warstwy debugowania dla często używanych typów .NET.
Źródło: opennet.ru


