Training
Module
Null-veiligheid in C# - Training
Leer hoe u codeert om te voorkomen dat NullReferenceException voorkomt.
Deze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
.NET 6 levert de laatste onderdelen van het .NET-eenwordingsplan dat is gestart met .NET 5. .NET 6 maakt de SDK, basisbibliotheken en runtime mogelijk voor mobiele apps, desktops, IoT en cloud-apps. Naast deze eenwording biedt het .NET 6-ecosysteem:
Vereenvoudigde ontwikkeling: Aan de slag is eenvoudig. Nieuwe taalfuncties in C# 10 verminderen de hoeveelheid code die u moet schrijven. En investeringen in de webstack en minimale API's maken het eenvoudig om kleinere, snellere microservices te schrijven.
Betere prestaties: .NET 6 is het snelste volledige stack-webframework, waardoor de rekenkosten worden verlaagd als u in de cloud werkt.
Ultieme productiviteit: .NET 6 en Visual Studio 2022 bieden hot-reload, nieuwe git-hulpprogramma's, intelligente codebewerking, robuuste diagnostische en testhulpprogramma's en betere teamsamenwerking.
.NET 6 wordt drie jaar ondersteund als een lts-release (long-term support).
Preview-functies zijn standaard uitgeschakeld. Ze worden ook niet ondersteund voor gebruik in productie en kunnen in een toekomstige versie worden verwijderd. Het nieuwe RequiresPreviewFeaturesAttribute wordt gebruikt om aantekeningen te maken bij preview-API's en een bijbehorende analysewaarschuwing als u deze preview-API's gebruikt.
.NET 6 wordt ondersteund door Visual Studio 2022 en Visual Studio 2022 voor Mac (en latere versies).
In dit artikel worden niet alle nieuwe functies van .NET 6 behandeld. Als u alle nieuwe functies wilt zien en voor meer informatie over de functies die in dit artikel worden vermeld, raadpleegt u het blogbericht .NET 6 .
.NET 6 bevat talloze prestatieverbeteringen. In deze sectie vindt u enkele verbeteringen: in FileStream, profielgestuurde optimalisatie en AOT-compilatie. Zie de blogpost over prestatieverbeteringen in .NET 6 voor gedetailleerde informatie.
Het System.IO.FileStream type is herschreven voor .NET 6 om betere prestaties en betrouwbaarheid in Windows te bieden. FileStream Blokkeert nu nooit wanneer deze is gemaakt voor asynchrone I/O in Windows. Zie het blogbericht File IO in .NET 6 voor meer informatie.
Met profielgestuurde optimalisatie (PGO) genereert de JIT-compiler geoptimaliseerde code in termen van de typen en codepaden die het meest worden gebruikt. .NET 6 introduceert dynamische PGO. Dynamische PGO werkt hand-in-hand met gelaagde compilatie om code verder te optimaliseren op basis van extra instrumentatie die wordt uitgevoerd tijdens laag 0. Dynamische PGO is standaard uitgeschakeld, maar u kunt deze inschakelen met de DOTNET_TieredPGO
omgevingsvariabele. Zie JIT-prestatieverbeteringen voor meer informatie.
.NET 6 introduceert Crossgen2, de opvolger van Crossgen, die is verwijderd. Crossgen en Crossgen2 zijn hulpprogramma's die vooraf (AOT) compilatie bieden om de opstarttijd van een app te verbeteren. Crossgen2 is geschreven in C# in plaats van C++, en kan analyses en optimalisatie uitvoeren die niet mogelijk waren met de vorige versie. Zie Gesprek over Crossgen2 voor meer informatie.
De .NET 6-release bevat ondersteuning voor macOS Arm64 (of 'Apple Silicon') en Windows Arm64-besturingssystemen, voor zowel systeemeigen Arm64-uitvoering als x64-emulatie. Bovendien worden de x64- en Arm64 .NET-installatieprogramma's naast elkaar geïnstalleerd. Zie .NET-ondersteuning voor macOS 11 en Windows 11 voor Arm64 en x64 voor meer informatie.
Hot reload is een functie waarmee u de broncode van uw app kunt wijzigen en deze wijzigingen direct kunt toepassen op uw actieve app. Het doel van de functie is om uw productiviteit te verhogen door te voorkomen dat de app opnieuw wordt opgestart tussen bewerkingen. Hot reload is beschikbaar in Visual Studio 2022 en het dotnet watch
opdrachtregelprogramma. Hot reload werkt met de meeste typen .NET-apps en voor C#, Visual Basic en C++-broncode. Zie de blogpost Hot reload voor meer informatie.
.NET Multi-Platform App UI (.NET TENANT) is nog in preview, met een releasekandidaat in het eerste kwartaal van 2022 en algemene beschikbaarheid (GA) in het tweede kwartaal van 2022. .NET MAUI maakt het mogelijk om systeemeigen client-apps te bouwen voor desktop- en mobiele besturingssystemen met één codebasis. Zie de blogpost Update op .NET Multi-platform App UI voor meer informatie.
C# 10 bevat innovaties zoals global using
instructies, declaraties van bestandsbereiken en recordstructs. Zie Wat is er nieuw in C# 10 voor meer informatie.
In combinatie met dat werk zijn de .NET SDK-projectsjablonen voor C# gemoderniseerd om enkele van de nieuwe taalfuncties te gebruiken:
async Main
Methodeglobal using
instructiesDoor deze nieuwe taalfuncties toe te voegen aan de projectsjablonen, begint de nieuwe code met de functies ingeschakeld. Bestaande code wordt echter niet beïnvloed wanneer u een upgrade uitvoert naar .NET 6. Zie voor meer informatie over deze sjabloonwijzigingen de .NET SDK: C#-projectsjablonen, gemoderniseerd blogbericht .
F# 6 voegt verschillende verbeteringen toe aan de F#-taal en F# Interactive. Zie Wat is er nieuw in F# 6 voor meer informatie.
Visual Basic heeft verbeteringen in de Visual Studio-ervaring en het opstarten van het Windows Forms-project.
Om de grootte van de .NET SDK kleiner te houden, zijn sommige onderdelen in nieuwe, optionele SDK-workloads geplaatst. Deze onderdelen omvatten .NET MAUI en Blazor WebAssembly AOT. Als u Visual Studio gebruikt, wordt ervoor gezorgd dat u SDK-workloads installeert die u nodig hebt. Als u de .NET CLI gebruikt, kunt u workloads beheren met behulp van de nieuwe dotnet workload
opdrachten:
Opdracht | Beschrijving |
---|---|
zoeken in dotnet-werkbelasting | Zoekt naar beschikbare workloads. |
dotnet-workload installeren | Hiermee wordt een opgegeven workload geïnstalleerd. |
dotnet-workload verwijderen | Hiermee verwijdert u een opgegeven workload. |
dotnet-werkbelasting bijwerken | Hiermee worden geïnstalleerde workloads bijgewerkt. |
dotnet-workloadherstel | Installeert alle geïnstalleerde workloads opnieuw om een defecte installatie te herstellen. |
lijst met dotnet-werkbelastingen | Een lijst met geïnstalleerde workloads. |
Zie Optionele SDK-workloads voor meer informatie.
Er zijn veel verbeteringen aangebracht in System.Text.Json .NET 6, zodat het nu een serialisatieoplossing voor industriële sterkte is.
.NET 6 voegt een nieuwe brongenerator toe voor System.Text.Json. Het genereren van bronnen werkt met JsonSerializer en kan op meerdere manieren worden geconfigureerd. Het kan de prestaties verbeteren, het geheugengebruik verminderen en het bijsnijden van assembly's vergemakkelijken. Zie Reflectie of brongeneratie kiezen in System.Text.Json en het gebruik van brongeneratie in System.Text.Json voor meer informatie.
Er is een nieuw documentobjectmodel (DOM) toegevoegd dat een aanvulling vormt op de bestaande alleen-lezen DOM. De nieuwe API biedt een lichtgewicht serialisatie alternatief voor gevallen waarin het gebruik van gewone oude CLR-objecttypen (POCO) niet mogelijk is. Hiermee kunt u ook efficiënt naar een subsectie van een grote JSON-structuur navigeren en een matrix lezen of een POCO deserialiseren vanuit die subsectie. De volgende nieuwe typen zijn toegevoegd ter ondersteuning van de schrijfbare DOM:
Zie JSON DOM-opties voor meer informatie.
System.Text.Json ondersteunt nu serialisatie en deserialisatie met IAsyncEnumerable<T> exemplaren. Asynchrone serialisatiemethoden inventariseren alle IAsyncEnumerable<T> exemplaren in een objectgrafiek en serialiseren ze vervolgens als JSON-matrices. Voor deserialisatie is de nieuwe methode JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) toegevoegd. Zie IAsyncEnumerable serialisatie voor meer informatie.
Nieuwe serialisatie-interfaces voor validatie en standaardwaarden:
Zie Callbacks voor meer informatie.
Nieuw kenmerk voor het ordenen van eigenschappen:
Zie De volgorde van geserialiseerde eigenschappen configureren voor meer informatie.
Nieuwe methode voor het schrijven van onbewerkte JSON:
Zie Write Raw JSON voor meer informatie.
Synchrone serialisatie en deserialisatie naar een stroom:
Nieuwe optie om een object te negeren wanneer een referentiecyclus wordt gedetecteerd tijdens serialisatie:
Zie Kringverwijzingen negeren voor meer informatie.
Zie JSON-serialisatie en deserialisatie in .NET voor meer informatie over serialiseren en deserialisatieSystem.Text.Json
.
.NET 6 bevat preview-ondersteuning voor HTTP/3, een nieuwe versie van HTTP. HTTP/3 lost een aantal bestaande functionele en prestatieproblemen op met behulp van een nieuw onderliggend verbindingsprotocol met de naam QUIC. QUIC brengt sneller verbindingen tot stand en verbindingen zijn onafhankelijk van het IP-adres, zodat mobiele clients kunnen roamen tussen wi-fi en mobiele netwerken. Zie HTTP/3 gebruiken met HttpClient voor meer informatie.
ASP.NET Core bevat verbeteringen in minimale API's, vooraf uitgevoerde compilatie (AOT) voor Blazor WebAssembly-apps en apps met één pagina. Bovendien kunnen Blazor-onderdelen nu worden weergegeven vanuit JavaScript en worden geïntegreerd met bestaande Op JavaScript gebaseerde apps. Zie Wat is er nieuw in ASP.NET Core 6 voor meer informatie.
.NET 6 biedt verbeterde ondersteuning voor OpenTelemetry, een verzameling hulpprogramma's, API's en SDK's waarmee u de prestaties en het gedrag van uw software kunt analyseren. API's in de System.Diagnostics.Metrics naamruimte implementeren de API-specificatie voor metrische gegevens van OpenTelemetry. Er zijn bijvoorbeeld vier instrumentklassen ter ondersteuning van verschillende metrische scenario's. De instrumentklassen zijn:
.NET 6 voegt preview-ondersteuning toe voor twee belangrijke beveiligingsbeperkende oplossingen: Control-flow Enforcement Technology (CET) en 'write exclusive execute' (W^X).
CET is een Intel-technologie die beschikbaar is in een aantal nieuwere Intel- en AMD-processors. Het voegt mogelijkheden toe aan de hardware die bescherming biedt tegen bepaalde hijacking-aanvallen voor controlestromen. .NET 6 biedt ondersteuning voor CET voor Windows x64-apps en u moet deze expliciet inschakelen. Zie .NET 6-compatibiliteit met Intel CET-schaduwstacks voor meer informatie.
W^X is beschikbaar voor alle besturingssystemen met .NET 6, maar alleen standaard ingeschakeld op Apple Silicon. W^X blokkeert het eenvoudigste aanvalspad door het ongedaan maken van de toewijzing van geheugenpagina's om tegelijkertijd schrijfbaar en uitvoerbaar te zijn.
Het bijsnijden van zelf-ingesloten implementaties wordt verbeterd. In .NET 5 zijn alleen ongebruikte assembly's ingekort. .NET 6 voegt ook het bijsnijden van ongebruikte typen en leden toe. Bovendien worden knipwaarschuwingen, waarmee u wordt gewaarschuwd op plaatsen waar bijsnijden code die tijdens runtime wordt gebruikt, standaard worden ingeschakeld . Zie Self-Ingesloten implementaties en uitvoerbare bestanden knippen voor meer informatie.
De .NET 6 SDK bevat een aantal nieuwe codeanalyses die betrekking hebben op API-compatibiliteit, platformcompatibiliteit, het beperken van de veiligheid, het gebruik van spanwijdte in tekenreekssamenvoeging en splitsing, snellere tekenreeks-API's en snellere verzameling-API's. Zie Analyzer-releases - .NET 6 voor een volledige lijst met nieuwe (en verwijderde) analyses.
De platformcompatibiliteitsanalyse herkent de Is<Platform>
methoden in de OperatingSystem klasse, bijvoorbeeld als OperatingSystem.IsWindows()platformbeveiliging. Als u aangepaste platformbeveiligingen wilt toestaan, introduceert .NET 6 twee nieuwe kenmerken die u kunt gebruiken om aantekeningen te maken op velden, eigenschappen of methoden met een ondersteunde of niet-ondersteunde platformnaam:
Application.SetDefaultFont(Font) is een nieuwe methode in .NET 6 waarmee het standaardlettertype in uw toepassing wordt ingesteld.
De sjablonen voor C# Windows Forms-apps zijn bijgewerkt ter ondersteuning global using
van richtlijnen, naamruimten met bestandsbereik en null-verwijzingstypen. Daarnaast bevatten ze toepassingsbootcode, waardoor standaardcode wordt verminderd en de Ontwerpfunctie van Windows Forms het ontwerpoppervlak in het voorkeurslettertype kan weergeven. De bootstrap-code is een aanroep naar ApplicationConfiguration.Initialize()
, een door de bron gegenereerde methode waarmee aanroepen naar andere configuratiemethoden worden verzonden, zoals Application.EnableVisualStyles(). Als u bovendien een niet-standaardlettertype instelt via de eigenschap ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize()
verzendt u een aanroep naar SetDefaultFont(Font).
Zie het blogbericht Wat is er nieuw in Windows Forms voor meer informatie.
De bron tarball, die alle bron voor de .NET SDK bevat, is nu een product van de .NET SDK-build. Andere organisaties, zoals Red Hat, kunnen hun eigen versie van de SDK bouwen met behulp van deze bron tarball.
Er zijn extra os-specifieke doelframeworks (TFM's) toegevoegd voor .NET 6, bijvoorbeeld net6.0-android
, net6.0-ios
en net6.0-macos
. Zie .NET 5+ OS-specifieke TFM's voor meer informatie.
In preview is de mogelijkheid om operators te gebruiken voor algemene typen in .NET 6. .NET 6 introduceert talloze interfaces die gebruikmaken van de nieuwe preview-functie van C# 10, static abstract
interfaceleden. Deze interfaces komen overeen met verschillende operators, bijvoorbeeld, IAdditionOperators
vertegenwoordigen de +
operator. De interfaces zijn beschikbaar in het System.Runtime.Experimental NuGet-pakket. Zie het blogbericht Algemene wiskunde voor meer informatie.
Als u een NuGet-bibliotheekontwikkelaar bent, kunt u met nieuwe hulpprogramma's voor pakketvalidatie controleren of uw pakketten consistent en goed zijn opgemaakt. U kunt bepalen of:
Zie het blogbericht Pakketvalidatie voor meer informatie.
.NET 6 introduceert de volgende nieuwe API's die code inspecteren en informatie over null-functionaliteit bieden:
Deze API's zijn handig voor hulpprogramma's en serialisatiefuncties op basis van reflectie.
Verschillende uitbreidingsnaamruimten hebben verbeteringen in .NET 6, zoals in de volgende tabel wordt weergegeven.
Naamruimte | Verbeteringen |
---|---|
Microsoft.Extensions.DependencyInjection | CreateAsyncScope hiermee kunt u veilig een using instructie gebruiken voor een serviceprovider die een IAsyncDisposable service registreert. |
Microsoft.Extensions.Hosting | Nieuwe ConfigureHostOptions methoden vereenvoudigen het instellen van toepassingen. |
Microsoft.Extensions.Logging | Microsoft.Extensions.Logging heeft een nieuwe brongenerator voor performante logboekregistratie-API's. De brongenerator wordt geactiveerd als u de nieuwe LoggerMessageAttribute toevoegt aan een partial logboekregistratiemethode. Tijdens het compileren genereert de generator de implementatie van de partial methode, die doorgaans sneller is tijdens runtime dan bestaande logboekregistratieoplossingen. Zie Compileertijd voor het genereren van bronbronnen voor logboekregistratie voor meer informatie. |
Er zijn talloze LINQ-methoden toegevoegd in .NET 6. De meeste nieuwe methoden die in de volgende tabel worden vermeld, hebben gelijkwaardige methoden in het System.Linq.Queryable type.
De volgende twee structs zijn toegevoegd in .NET 6: System.DateOnly en System.TimeOnly. Deze vertegenwoordigen respectievelijk het datumgedeelte en het tijdgedeelte van een DateTime. DateOnly is handig voor verjaardagen en verjaardagen, en TimeOnly is handig voor dagelijkse alarmen en wekelijkse kantooruren.
U kunt nu IANA(Internet Assigned Numbers Authority) of Windows-tijdzone-id's gebruiken op elk besturingssysteem waarop tijdzonegegevens zijn geïnstalleerd. De TimeZoneInfo.FindSystemTimeZoneById(String) methode is bijgewerkt om de invoer van een Windows-tijdzone automatisch te converteren naar een IANA-tijdzone (of omgekeerd) als de aangevraagde tijdzone niet op het systeem wordt gevonden. Daarnaast zijn de nieuwe methoden TryConvertIanaIdToWindowsId(String, String) toegevoegd voor scenario's wanneer u nog steeds handmatig moet converteren van de ene TryConvertWindowsIdToIanaId tijdzone-indeling naar een andere.
Er zijn ook enkele andere verbeteringen in de tijdzone. Zie Datum-, tijd- en tijdzoneverbeteringen in .NET 6 voor meer informatie.
De nieuwe PriorityQueue<TElement,TPriority> klasse vertegenwoordigt een verzameling items met zowel een waarde als een prioriteit. Items worden gedequeueerd in een hogere prioriteitsvolgorde, dat wil gezegd dat het item met de laagste prioriteitswaarde eerst wordt gedequeueerd. Met deze klasse wordt een minimale heap-gegevensstructuur geïmplementeerd.
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven:
Training
Module
Null-veiligheid in C# - Training
Leer hoe u codeert om te voorkomen dat NullReferenceException voorkomt.
Documentatie
Meer informatie over .NET 5, een platformoverschrijdend en opensource-ontwikkelplatform dat de volgende evolutie van .NET Core is.
Wat is er nieuw in .NET Core 3.1? - .NET
Meer informatie over de nieuwe functies in .NET Core 3.1.
Meer informatie over de nieuwe functies die zijn geïntroduceerd in .NET 7.