Miroslav Holec
Premium

Novinky v .NET 8 a C# 12 - kompletní přehled

Miroslav Holec   18. listopadu 2023

Microsoft vydal 11. listopadu další verzi frameworku .NET 8 a s ní představil mnoho zajímavých novinek. Kromě výkonnostních vylepšení a mnoha drobností v .NETu a C# došlo také k zásadním inovacím webového frameworku.

image-20231203174534577

Všichni musíme zmigrovat na .NET 8

Chcete-li dostávat pravidelné záplaty aplikací, pak v roce 2024 budete muset migrovat na .NET 8. V květnu totiž končí podpora sedmičky a v listopadu i šestky. Existující aplikace budou sice nadále fungovat, nebudou k nim ale vydány žádné bezpečnostní záplaty ani jiné opravy. Verze .NET 8 je LTS release, takže se můžeme těšit na 3 roky dlouhou podporu (tedy do listopadu 2026).

V .NET 8 se plno věcí dotáhlo do konce

Minulý rok Microsoft představil .NET 7, ve kterém příliš mnoho vylepšení nebylo. Většina úsilí se zaměřovala na C#. Tento rok je to přesně naopak, takže .NET 8 přináší novinek mnoho a naopak C# trochu zaostává a přináší jen nucená vylepšení, které potřebovaly spíše týmy v Microsoftu. Dá se tedy říci, že na .NET 8 je ideální pohlížet jako na inkrement posledních 2 let. Podobně jsem se rozhodl opět koncipovat i mé školení novinek.

image-20231203174738373

Novinky v .NET 8

Od .NET 8 půjde volitelně změnit výstup kompilace do samostatného artifacts adresáře. Přidána byla vylepšení v hosting lifecycle a v dotnet nástrojích, jako je dotnet publish a dotnet pack. Mnoho menších vylepšení se dočkaly i metriky. Prakticky celým frameworkem se nese více než 1200 výkonnostních vylepšení. Nejviditelnější je pro vývojáře podpora AOT kompilace ve většině druhů projektů. Minimal APIs se dočkali částečné podpory AOT kompilace a do MVC frameworku se s podporou nepočítá vůbec. Dává to celkem smysl, protože AOT využijeme hlavně v cloudu tam, kde se nám aplikace častěji spouští (typicky FaaS).

image-20231203174702933

Ve společných knihovnách došlo k mnoha menším vylepšením, ze kterých budou těžit téměř všichni vývojáři. Již od .NET 7 došlo k výkonnostním i funkčním vylepšením JSON serializace a v .NET 8 se množství novinek znásobilo. Dále dostáváme možnost abstrakce času s TimeProvider, lepší manipulaci s UTF 8 řetězci nebo nové a vylepšené metody pro generování náhodných čísel. V oblasti výkonnosti Microsoft představil i nové druhy frozen kolekcí, přidal do frameworku nové validační atributy a zavedl podporu SHA-3. Pro práci s archivováním balíčků dostáváme podporu TAR nebo rozšíření ZipFile o metody založené na streamech.

C# 12

Většina vylepšení byla představena v C# 11 a do dvanáctky přibylo jen pár fíčurek, které spíše potřebovaly vývojáři v Microsoftu. Zajímavé je zavedení primárních konstruktorů, které známe z typu record. Zde ale s rozdílem, že inicializaci vnitřních members třídy musíme udělat ručně.

Pro snadnější vytváření polí můžeme použít Collection Expressions a nově můžeme vytvářet lambda výrazy s defaultní hodnotou parametru. Klíčové slovo using můžeme použít nejen k odkazu na jmenný prostor, ale i na konkrétní typ. Protože Microsoft nestíhal dokončit podporu Interceptorů, označil je jako experimentální funkci novým atributem Experimental, který můžeme používat i my.

using Cislo = System.Decimal;

[Experimental]
public class Features(string name)
{
   public string Name { get; } = name;
   
   public void Do()
   {
      int[] a = [1,2,3];
      var incement = (int src, int increment = 1) => src + increment;
   }
}

Webový framework

Microsoft se snaží maximálně podporovat běh aplikací v cloudu. Kromě mnoha vylepšení pro přirozený běh aplikací (včetně AOT kompilace) byla představena preview verze řešení .NET Aspire. Nový druh projektu umožňuje snadno poskládat kompletní microservices stack připravený pro nasazení do Azure.

Asi největší novinkou je model Blazor Server Side Rendering. Tento model umožňuje hostovat Blazor aplikace na straně serveru s tím, že případná interakce je řízena skrze dodatečné fetch requesty. Složitější komponenty mohou být navíc renderovány v tradičním Server nebo WebAssembly módu. Vrcholem je pak možnost automatického režimu, kdy se komponenta nejprve vyrenderuje a interaguje v režimu Server a s druhým načtením již pracuje v režimu WebAssembly, který využívá předcachované DLL soubory. Ve Visual Studio je nyní nový průvodce pro založení Blazor projektu a zmíněné vychytávky mají vliv i například na Blazor Server, jehož šablona je nyní přehlednější a už nepotřebuje Razor Pages (pracuje se výhradně s razor soubory).

image-20231203174949997

Pro vývoj SPA aplikací jsou k dispozici vylepšené šablony pro React, Angular a Vue. Vývojář si může vybrat zda front-end chce vytvořit standalone nebo ve full-stack režimu a dále lze též volit mezi JavaScriptem a TypeScriptem.

V Minimal APIs máme možnost bindování formulářů a v souvislosti s tím můžeme zapojit také generování a validaci Antiforgery tokenů. Další vychytávky se týkají v zásadě celého webového frameworku. Například generické atributy protekly až do controllerů. Hodit se to může například při definici typů pro swagger. Používáte-li swagger často, oceníte možná i extension metodu RequireAuthorization, se kterou swagger endpointy ochráníte před slíděním neautorizovanch uživatelů. V SignalR byla přidána funkce stateful reconnect, díky které můžeme udržet spojení na server stabilnější. Vylepšení se dočkal i HTTP Logging Middleware, Problem Details Service a Output Caching, který lze nyní snadno napojit na Redis. Potěší i malé vychytávky jako short circuiting požadavků s metodou MapShortCircuit.

Vývojáři na platformě macOS konečně dostávají podporu ALPN pro vývoj gRPC aplikací.

Visual Studio a Tools

Inspirace prostředím Rider se nezapře. Do Visual Studia byl přidán Endpoints Explorer, který umí staticky analyzovat kód a dohledat API endpointy vytvořené pomocí controllerů i minimal APIs. Součástí je i testování HTTP požadavků vestavěným klientem a možnost uložit testované požadavky do samostatných souborů. Lepší podpora endpointů úzce souvisí s routováním. Visual Studio tak umí při konfiguraci routování lépe napovídat, zvýrazňovat syntaxi a v debug módu je nyní snadné procházet definované endpointy. To vše již známe dlouhé roky z prostředí JetBrains Rider a nyní to můžeme používat i ve VS.

Závěr a školení .NET 8

Nová verze přináší nepřehlédnutelná vylepšení, ať už se jedná o AOT kompilaci, nový model hostování Blazor aplikací nebo hromady drobných vychytávek v C# i v jádru .NETu. Takřka zdarma navíc dostáváme i více než 1200 výkonnostních vylepšení, díky kterým lze bez námahy zvýšit propustnost aplikace.

Většinu ze zmíněných novinek si můžete prohlédnout a vyzkoušet v rámci mého školení Novinky v .NET 8 a C#. Tradičně se zaměřuji na poslední dvě verze frameworku s větším důrazem na novější LTS release. Během jednoho dne tak získáte ucelený přehled o všech nejzásadnějších novinkách.