Szkolenie
Moduł
Bezpieczeństwo zerowe w języku C# - Training
Poznaj praktyki kodowania, aby zapobiec wystąpieniu elementu NullReferenceException.
Ta przeglądarka nie jest już obsługiwana.
Przejdź na przeglądarkę Microsoft Edge, aby korzystać z najnowszych funkcji, aktualizacji zabezpieczeń i pomocy technicznej.
Platforma .NET 6 dostarcza końcowe części planu zjednoczenia platformy .NET, które rozpoczęły się od platformy .NET 5. Platforma .NET 6 łączy zestaw SDK, biblioteki podstawowe i środowisko uruchomieniowe w aplikacjach mobilnych, klasycznych, IoT i w chmurze. Oprócz tego zjednoczenia ekosystem .NET 6 oferuje:
Uproszczone programowanie: Wprowadzenie jest łatwe. Nowe funkcje językowe w języku C# 10 zmniejszają ilość kodu potrzebnego do pisania. Inwestycje w stos internetowy i minimalne interfejsy API ułatwiają szybkie zapisywanie mniejszych, szybszych mikrousług.
Lepsza wydajność: platforma .NET 6 to najszybsza platforma internetowa pełnego stosu, która obniża koszty obliczeń, jeśli korzystasz z chmury.
Ostateczna produktywność: programy .NET 6 i Visual Studio 2022 zapewniają gorące ponowne ładowanie, nowe narzędzia git, inteligentne edytowanie kodu, niezawodną diagnostykę i narzędzia do testowania oraz lepszą współpracę zespołową.
Platforma .NET 6 będzie obsługiwana przez trzy lata jako wersja długoterminowa (LTS).
Funkcje w wersji zapoznawczej są domyślnie wyłączone. Nie są one również obsługiwane do użytku w środowisku produkcyjnym i mogą zostać usunięte w przyszłej wersji. Nowy RequiresPreviewFeaturesAttribute jest używany do dodawania adnotacji do interfejsów API w wersji zapoznawczej oraz odpowiedniego analizatora alertów, jeśli używasz tych interfejsów API w wersji zapoznawczej.
Platforma .NET 6 jest obsługiwana przez programy Visual Studio 2022 i Visual Studio 2022 dla komputerów Mac (i nowsze wersje).
Ten artykuł nie obejmuje wszystkich nowych funkcji platformy .NET 6. Aby zapoznać się ze wszystkimi nowymi funkcjami i uzyskać więcej informacji na temat funkcji wymienionych w tym artykule, zobacz wpis w blogu Ogłaszanie platformy .NET 6 .
Platforma .NET 6 zawiera wiele ulepszeń wydajności. W tej sekcji wymieniono niektóre ulepszenia — w pliku FileStream, optymalizacji sterowanej profilem i kompilacji AOT. Aby uzyskać szczegółowe informacje, zobacz wpis w blogu Ulepszenia wydajności na platformie .NET 6 .
Typ System.IO.FileStream został przepisany dla platformy .NET 6, aby zapewnić lepszą wydajność i niezawodność w systemie Windows. FileStream Teraz nigdy nie blokuje tworzenia dla asynchronicznych operacji we/wy w systemie Windows. Aby uzyskać więcej informacji, zobacz wpis w blogu Ulepszenia operacji we/wy plików na platformie .NET 6 .
Optymalizacja sterowana profilem (PGO) to miejsce, w którym kompilator JIT generuje zoptymalizowany kod pod względem typów i ścieżek kodu, które są najczęściej używane. Platforma .NET 6 wprowadza dynamiczny punkt PGO. Dynamiczne rozwiązanie PGO działa ręcznie z kompilacją warstwową w celu dalszej optymalizacji kodu na podstawie dodatkowej instrumentacji wprowadzonej w warstwie 0. Dynamiczne PGO jest domyślnie wyłączone, ale można ją włączyć za pomocą zmiennej środowiskowejDOTNET_TieredPGO
. Aby uzyskać więcej informacji, zobacz Ulepszenia wydajności JIT.
.NET 6 wprowadza Crossgen2, następcę Crossgengen, który został usunięty. Crossgen i Crossgen2 to narzędzia, które zapewniają kompilację przed czasem (AOT), aby poprawić czas uruchamiania aplikacji. Język Crossgen2 jest napisany w języku C# zamiast języka C++i może wykonywać analizę i optymalizację, które nie były możliwe w poprzedniej wersji. Aby uzyskać więcej informacji, zobacz Konwersacja dotycząca crossgen2.
Wersja .NET 6 obejmuje obsługę systemów macOS Arm64 (lub "Apple Silicon") i Windows Arm64 dla natywnego wykonywania arm64 i emulacji x64. Ponadto instalatory platformy .NET x64 i Arm64 są teraz instalowane obok siebie. Aby uzyskać więcej informacji, zobacz .NET Support for macOS 11 and Windows 11 for Arm64 and x64 (Obsługa platformy .NET dla systemów macOS 11 i Windows 11 dla arm64 i x64).
Przeładowywanie na gorąco to funkcja, która umożliwia modyfikowanie kodu źródłowego aplikacji i natychmiastowe stosowanie tych zmian do uruchomionej aplikacji. Celem tej funkcji jest zwiększenie produktywności dzięki unikaniu ponownego uruchamiania aplikacji między edycjami. Przeładowywanie na gorąco jest dostępne w programie Visual Studio 2022 i narzędziu dotnet watch
wiersza polecenia. Przeładowywanie na gorąco działa z większością typów aplikacji platformy .NET oraz w kodzie źródłowym C#, Visual Basic i C++. Aby uzyskać więcej informacji, zobacz wpis w blogu Hot reload (Przeładowywanie na gorąco).
Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) jest nadal w wersji zapoznawczej, a kandydat do wydania będzie dostępny w pierwszym kwartale 2022 r. i ogólnie dostępnej (GA) w drugim kwartale 2022 r. Program .NET MAUI umożliwia tworzenie natywnych aplikacji klienckich dla systemów operacyjnych klasycznych i mobilnych z pojedynczą bazą kodu. Aby uzyskać więcej informacji, zobacz wpis w blogu Aktualizowanie interfejsu użytkownika aplikacji wieloplatformowej platformy .NET.
Język C# 10 obejmuje innowacje, takie jak global using
dyrektywy, deklaracje przestrzeni nazw o zakresie plików i struktury rekordów. Aby uzyskać więcej informacji, zobacz Co nowego w języku C# 10.
W ramach tej pracy szablony projektów zestawu .NET SDK dla języka C# zostały zmodernizowane w celu korzystania z niektórych nowych funkcji językowych:
async Main
Metodaglobal using
dyrektywyDodając te nowe funkcje językowe do szablonów projektów, nowy kod zaczyna się od funkcji włączonych. Jednak istniejący kod nie ma wpływu na uaktualnienie do platformy .NET 6. Aby uzyskać więcej informacji na temat tych zmian szablonów, zobacz wpis w blogu .NET SDK: szablony projektów języka C#.
Język F# 6 dodaje kilka ulepszeń języka F# i F# Interactive. Aby uzyskać więcej informacji, zobacz Co nowego w języku F# 6.
Program Visual Basic ma ulepszenia środowiska programu Visual Studio i uruchamiania projektu Windows Forms.
Aby zachować mniejszy rozmiar zestawu .NET SDK, niektóre składniki zostały umieszczone w nowych, opcjonalnych obciążeniach zestawu SDK. Składniki te obejmują platformę .NET MAUI i zestaw WebAssembly AOT platformy Blazor. Jeśli używasz programu Visual Studio, zajmie się instalowaniem dowolnych potrzebnych obciążeń zestawu SDK. Jeśli używasz interfejsu wiersza polecenia platformy .NET, możesz zarządzać obciążeniami przy użyciu nowych dotnet workload
poleceń:
Polecenie | opis |
---|---|
wyszukiwanie obciążeń dotnet | Wyszukuje dostępne obciążenia. |
dotnet workload install (instalacja obciążenia dotnet) | Instaluje określone obciążenie. |
odinstalowywanie obciążenia dotnet | Usuwa określone obciążenie. |
dotnet workload update | Aktualizacje zainstalowanych obciążeń. |
dotnet workload repair (naprawa obciążenia dotnet) | Ponownie instaluje wszystkie zainstalowane obciążenia, aby naprawić uszkodzoną instalację. |
dotnet workload list | Wyświetla listę zainstalowanych obciążeń. |
Aby uzyskać więcej informacji, zobacz Opcjonalne obciążenia zestawu SDK.
W programie .NET 6 wprowadzono System.Text.Json wiele ulepszeń, dzięki czemu jest to teraz rozwiązanie serializacji "siła przemysłowa".
Platforma .NET 6 dodaje nowy generator źródeł dla programu System.Text.Json. Generowanie źródła działa z elementem JsonSerializer i można je skonfigurować na wiele sposobów. Może zwiększyć wydajność, zmniejszyć użycie pamięci i ułatwić przycinanie zestawów. Aby uzyskać więcej informacji, zobacz How to choose reflection or source generation in System.Text.Json and How to use source generation in System.Text.Json (Jak używać generowania źródła w pliku System.Text.Json).
Dodano nowy, zapisywalny model obiektu dokumentu (DOM), który uzupełnia istniejący dom tylko do odczytu. Nowy interfejs API zapewnia uproszczoną serializacji alternatywę dla przypadków, gdy użycie zwykłych starych typów obiektów CLR (POCO) nie jest możliwe. Umożliwia to również efektywne przechodzenie do podsekcji dużego drzewa JSON i odczytywanie tablicy lub deserializacji poco z tej podsekcji. Dodano następujące nowe typy do obsługi zapisywalnego modelu DOM:
Aby uzyskać więcej informacji, zobacz Opcje modelu DOM w formacie JSON.
System.Text.Json teraz obsługuje serializacji i deserializacji IAsyncEnumerable<T> z wystąpieniami. Asynchroniczne metody serializacji wyliczają wszystkie IAsyncEnumerable<T> wystąpienia na grafie obiektu, a następnie serializują je jako tablice JSON. W przypadku deserializacji dodano nową metodę JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) . Aby uzyskać więcej informacji, zobacz IAsyncEnumerable serialization (Serializacja IAsyncEnumerable).
Nowe interfejsy serializacji na potrzeby walidacji i wartości domyślnych:
Aby uzyskać więcej informacji, zobacz Wywołania zwrotne.
Nowy atrybut porządkowania właściwości:
Aby uzyskać więcej informacji, zobacz Konfigurowanie kolejności właściwości serializowanych.
Nowa metoda zapisu "raw" JSON:
Aby uzyskać więcej informacji, zobacz Write Raw JSON (Zapis nieprzetworzonych danych JSON).
Synchroniczna serializacji i deserializacji do strumienia:
Nowa opcja ignorowania obiektu w przypadku wykrycia cyklu odwołania podczas serializacji:
Aby uzyskać więcej informacji, zobacz Ignoruj odwołania cykliczne.
Aby uzyskać więcej informacji na temat serializacji i deserializacji za pomocą System.Text.Json
programu , zobacz serializacja i deserializacja JSON na platformie .NET.
Platforma .NET 6 obejmuje obsługę wersji zapoznawczej protokołu HTTP/3, nowej wersji protokołu HTTP. Protokół HTTP/3 rozwiązuje niektóre istniejące wyzwania związane z funkcjonalnością i wydajnością przy użyciu nowego podstawowego protokołu połączenia o nazwie QUIC. QuiC ustanawia połączenia szybciej, a połączenia są niezależne od adresu IP, dzięki czemu klienci mobilni mogą wędrować między sieciami Wi-Fi i komórkowymi. Aby uzyskać więcej informacji, zobacz Używanie protokołu HTTP/3 z klientem HttpClient.
ASP.NET Core zawiera ulepszenia w minimalnych interfejsach API, kompilację przed czasem (AOT) dla aplikacji Zestawu WebAssembly platformy Blazor i aplikacji jednostronicowych. Ponadto składniki platformy Blazor można teraz renderować z poziomu języka JavaScript i zintegrowane z istniejącymi aplikacjami opartymi na języku JavaScript. Aby uzyskać więcej informacji, zobacz Co nowego w programie ASP.NET Core 6.
Platforma .NET 6 zapewnia ulepszoną obsługę technologii OpenTelemetry, która jest kolekcją narzędzi, interfejsów API i zestawów SDK, które ułatwiają analizowanie wydajności i zachowania oprogramowania. Interfejsy API w System.Diagnostics.Metrics przestrzeni nazw implementują specyfikację interfejsu API metryk OpenTelemetry. Istnieją na przykład cztery klasy instrumentów do obsługi różnych scenariuszy metryk. Klasy instrumentów to:
Platforma .NET 6 dodaje obsługę wersji zapoznawczej dla dwóch kluczowych środków zaradczych zabezpieczeń: Control-flow Enforcement Technology (CET) i "write exclusive execute" (W^X).
CET to technologia Intel dostępna w nowszych procesorach Intel i AMD. Dodaje ona możliwości sprzętu, który chroni przed atakami porwania przepływu sterowania. Platforma .NET 6 zapewnia obsługę cet dla aplikacji systemu Windows x64 i musisz jawnie ją włączyć. Aby uzyskać więcej informacji, zobacz Zgodność platformy .NET 6 ze stosami w tle Intel CET.
Program W^X jest dostępny we wszystkich systemach operacyjnych z platformą .NET 6, ale domyślnie włączony tylko w systemie Apple Silicon. Program W^X blokuje najprostszą ścieżkę ataku, umożliwiając jednoczesne zapisywanie i wykonywanie stron pamięci.
Ulepszono przycinanie wdrożeń samodzielnych. Na platformie .NET 5 tylko nieużywane zestawy zostały przycięte. Platforma .NET 6 dodaje również przycinanie nieużywanych typów i elementów członkowskich. Ponadto ostrzeżenia dotyczące przycinania, które ostrzegają o miejscach, w których przycinanie może usunąć kod używany w czasie wykonywania, są teraz domyślnie włączone . Aby uzyskać więcej informacji, zobacz Przycinanie samodzielnych wdrożeń i plików wykonywalnych.
Zestaw .NET 6 SDK zawiera kilka nowych analizatorów kodu, które dotyczą zgodności interfejsu API, zgodności platformy, bezpieczeństwa przycinania, używania zakresu w łączenia ciągów i dzielenia, szybszego interfejsu API ciągów i szybszych interfejsów API kolekcji. Aby uzyskać pełną listę nowych (i usuniętych) analizatorów, zobacz Analizator wydania — .NET 6.
Analizator zgodności platformy Is<Platform>
rozpoznaje metody w OperatingSystem klasie, na przykład OperatingSystem.IsWindows(), jako strażniki platformy. Aby zezwolić na niestandardowe osłony platformy, platforma .NET 6 wprowadza dwa nowe atrybuty, których można użyć do dodawania adnotacji do pól, właściwości lub metod z obsługiwaną lub nieobsługiwaną nazwą platformy:
Application.SetDefaultFont(Font) to nowa metoda na platformie .NET 6, która ustawia domyślną czcionkę w aplikacji.
Szablony aplikacji windows Forms języka C# zostały zaktualizowane w celu obsługi global using
dyrektyw, przestrzeni nazw o zakresie plików i typów odwołań dopuszczanych do wartości null. Ponadto obejmują one kod bootstrap aplikacji, co zmniejsza standardowy kod i umożliwia projektantowi Windows Forms renderowanie powierzchni projektowej w preferowanej czcionki. Kod bootstrap jest wywołaniem metody ApplicationConfiguration.Initialize()
, która jest metodą wygenerowaną przez źródło, która emituje wywołania do innych metod konfiguracji, takich jak Application.EnableVisualStyles(). Ponadto, jeśli ustawisz czcionkę inną niż domyślna za pomocą właściwości ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize()
emituje wywołanie metody SetDefaultFont(Font).
Aby uzyskać więcej informacji, zobacz wpis w blogu Co nowego w formularzach Windows Forms .
Źródło tarball, który zawiera wszystkie źródła zestawu .NET SDK, jest teraz produktem kompilacji zestawu .NET SDK. Inne organizacje, takie jak Red Hat, mogą tworzyć własną wersję zestawu SDK przy użyciu tego źródłowego tarballa.
Dodano dodatkowe elementy monikers (TFM) specyficzne dla systemu operacyjnego dla platformy .NET 6, na przykład net6.0-android
, net6.0-ios
i net6.0-macos
. Aby uzyskać więcej informacji, zobacz Program TFMs specyficzny dla systemu operacyjnego .NET 5+.
W wersji zapoznawczej można używać operatorów na typach ogólnych na platformie .NET 6. Platforma .NET 6 wprowadza wiele interfejsów, które korzystają z nowej funkcji języka C# 10 w wersji zapoznawczej, static abstract
członków interfejsu. Te interfejsy odpowiadają różnym operatorom, na przykład reprezentuje IAdditionOperators
+
operator. Interfejsy są dostępne w pakiecie NuGet System.Runtime.Experimental . Aby uzyskać więcej informacji, zobacz wpis w blogu Ogólne matematyka .
Jeśli jesteś deweloperem biblioteki NuGet, nowe narzędzia do sprawdzania poprawności pakietów umożliwiają sprawdzenie, czy pakiety są spójne i dobrze sformułowane. Możesz określić, czy:
Aby uzyskać więcej informacji, zobacz wpis w blogu Dotyczącym weryfikacji pakietów.
Platforma .NET 6 wprowadza następujące nowe interfejsy API, które sprawdzają kod i zapewniają informacje o wartości null:
Te interfejsy API są przydatne w przypadku narzędzi opartych na odbiciu i serializatorów.
Kilka rozszerzeń przestrzeni nazw ma ulepszenia na platformie .NET 6, jak pokazano w poniższej tabeli.
Przestrzeń nazw | Ulepszenia |
---|---|
Microsoft.Extensions.DependencyInjection | CreateAsyncScope umożliwia bezpieczne używanie using instrukcji dla dostawcy usług, który rejestruje usługę IAsyncDisposable . |
Microsoft.Extensions.Hosting | Nowe ConfigureHostOptions metody upraszczają konfigurację aplikacji. |
Microsoft.Extensions.Logging | Microsoft.Extensions.Logging ma nowy generator źródeł dla wydajnych interfejsów API rejestrowania. Generator źródła jest wyzwalany w przypadku dodania nowego LoggerMessageAttribute do metody rejestrowania partial . W czasie kompilacji generator generuje implementację partial metody, która jest zwykle szybsza w czasie wykonywania niż istniejące rozwiązania rejestrowania. Aby uzyskać więcej informacji, zobacz Generowanie źródła rejestrowania w czasie kompilacji. |
W programie .NET 6 dodano wiele metod LINQ. Większość nowych metod wymienionych w poniższej tabeli ma równoważne metody w typie System.Linq.Queryable .
W programie .NET 6 dodano następujące dwie struktury: System.DateOnly i System.TimeOnly. Reprezentują one odpowiednio część daty i część DateTimegodziny elementu . DateOnly jest przydatna w przypadku urodzin i rocznic oraz TimeOnly jest przydatna w przypadku codziennych alarmów i tygodniowych godzin pracy.
Teraz możesz użyć identyfikatorów IANA (Internet Assigned Numbers Authority) lub Identyfikatorów stref czasowych systemu Windows w dowolnym systemie operacyjnym, który ma zainstalowane dane strefy czasowej. Metoda TimeZoneInfo.FindSystemTimeZoneById(String) została zaktualizowana w celu automatycznego przekonwertowania danych wejściowych ze strefy czasowej systemu Windows na strefę czasową IANA (lub odwrotnie), jeśli żądana strefa czasowa nie zostanie znaleziona w systemie. Ponadto nowe metody TryConvertIanaIdToWindowsId(String, String) i TryConvertWindowsIdToIanaId zostały dodane do scenariuszy, gdy nadal trzeba ręcznie przekonwertować z jednego formatu strefy czasowej na inny.
Istnieje również kilka innych ulepszeń strefy czasowej. Aby uzyskać więcej informacji, zobacz Ulepszenia daty, godziny i strefy czasowej na platformie .NET 6.
Nowa PriorityQueue<TElement,TPriority> klasa reprezentuje kolekcję elementów, które mają zarówno wartość, jak i priorytet. Elementy są w kolejce w kolejności rosnącego priorytetu — czyli element o najniższej wartości priorytetu jest najpierw odsyłany. Ta klasa implementuje minimalną strukturę danych stert .
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię:
Szkolenie
Moduł
Bezpieczeństwo zerowe w języku C# - Training
Poznaj praktyki kodowania, aby zapobiec wystąpieniu elementu NullReferenceException.