Uvolněn (ASP.NET) Core 2.1.0, EF Core 2.1.0 - tipy na update
Článek se vztahuje k verzi produktu ASP.NET Core 2.1
Tento článek byl napsán v roce 2018. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.
Bez zbytečného humbuku Microsoft uvolnil finální verzi ASP.NET Core 2.1.0 a Entity Framework Core 2.1. Oproti již propíraným RC verzím nepřináší nic nového a jedná se spíše jen o stabilizovaný patch. V tomto článku bych rád shrnul, co to znamená pro webové vývojáře vzhledem k různým verzím ASP.NET Core.
Přehled, co je nového
Z hlediska funkčnosti je potřeba podívat se na jednotlivé novinky z ptačí perspektivy. Nová verze .NET Core SDK ke stažení je zde a obsahuje:
- .NET Core SDK 2.1.300
- .NET Core Runtime 2.1.0
- ASP.NET Core Runtime 2.1.0
.NET Core 2.1
Samotný .NET Core 2.1 je dostupný klasicky pro Win/macOS/Linux + další platformy a přináší především výkonnostní vylepšení.
- podpora ve Visual Studiu 15.7 a vyšším
- vydán jako LTS release s podporou na dobu 3 let (další updaty jsou jen security patches)
- podpora pro Ubuntu 18.04, Aline, ARM32 a celé řadě dalších platforem
- nově jsou vydány .NET Core Tools (obdoba NPM), možnost instalace dalšího toolingu
- automaticky byly konvertovány původní dotnet ef, dotnet sql-cache a další
- přidána nová kryptografická API
- možnost použít Windows Compatibility Pack (+20000 API pro usnadnění migrace z .NET Frameworku)
- další specifické novinky v oficiálním oznámení
ASP.NET Core 2.1
Nová verze webového frameworku ASP.NET Core přináší několik drobných funkčních vylepšení oproti verzi 2.0. Celkově vzato se nekoná žádná revoluce.
- Podpora SignalR
- Razor Class Libraries - stavba znovupoužitelných knihoven
- HTTPS defaultně povoleno (middleware)
- Podpora ochrany citlivých dat vzhledem ke GDPR (např.: cookies)
- Drobné novinky pro vývoj webových API, nový atribut [ApiController]
- Aktualizace SPA šablon
Podle oficiálních informací je ASP.NET Core 2.1 dostupný i v Azure App Service. I když tento blog v deploy režimu self-contained běží na ASP.NET Core 2.1, nemohu potvrdit, že bych již nové SDK / runtime viděl v App Services.
Update 31.5.2018 - už se na Azure App Service objevují nové ASP.NET Runtimes (All i App)
Entity Framework Core 2.1
Zde je novinek podstatně více a oproti EF 2.0 se stává nová verze EF Core 2.1 mnohem mocnější, především díky podpoře mnoha drobných užitečných funkcí. Dokonce i finální verze oproti RC doznala opravy na 20 různých chyb.
- Podpora Lazy Loadingu
- Parametry v konstruktoru u POCO enity (primárně pro lazy loading) - velmi kontroverzní
- Value konverze (mezitypové, například enum na int, string na number atd.)
- Překlad GROUP BY, funkční především pro jednodušší výrazy
- Data Seeding přímo v mapování pomocí fluent API
- Podpora Query Types (tabulky bez PK, views a specifické SQL dotazy)
- Drobná vylepšení v rámci generování migrací, vylepšení pořadí sloupců z properties atd.
- Podpora komplexních typů, nově označených jako Owned Types
- A plno dalších drobností, viz. oficiální release info
Jak updatovat na verzi 2.1
Pro přehlednost si rozdělme vývojáře na dvě skupiny, protože situace se zde liší:
Vyvíjíte nad .NET Core
Píšete-li aplikaci ASP.NET Core, která běží nad multiplatformním .NET Core, pak je situace celkem snadná. Buď máte v aplikaci smečku balíčků, které tvoří ASP.NET Core framework, nebo již používáte balíček Microsoft.AspNetCore.All. V obou případech doporučuji přejít na nový balíček
Tento metabalíček obsahuje odkazy na konkrétní verze balíčků, tvořířích ASP.NET Core framework a EF Core framework. Jedná se o stabilní balíček a zároveň i runtime. Pokud aplikace budete publikovat na server v režimu framework-dependent, získáte tím automatické opatchování s instalací každé nové minor verze .NET Core runtime. Po přechodu na tuto verzi balíčku vám budou možná některé balíčky chybět. Je to v pořádku - chybějící balíčky jsou vystrčeny mimo stabilní framework a musíte si je udržovat svépomocí.
Původní balíček Microsoft.AspNetCore.All můžete používat i nadále. Jedná se však o rizikovější cestu, protože zde závislosti nejsou dány na konkrétní verze ASP.NET Core balíčků a kromě toho tento balíček obsahuje závislosti na 3rd party knihovny mimo kontrolu Microsoftu.
V obou případech (.All / .App) se jedná zároveň i o runtimes. Na toto téma jsem napsal článek a měl jsem i přednášku, kterou si doporučuji poslechnout pro pochopení historie vývoje ASP.NET Core.
Vyvíjíte nad .NET Frameworkem
Zde je situace trochu horší, protože nemůžete používat výše zmíněné balíčky Microsoft.AspNetCore.All/.App. Tyto balíčky jsou totiž targetovány pouze na .NET Core 2.1. Tudíž aktualizace aplikace pro vás bude znamenat ruční update všech dosavadních balíčků na verzi 2.1. Máte-li aplikaci postavenou na ASP.NET Core 1.0. / 1.1., čeká vás hodně práce. Kromě změny NuGet balíčků bude vhodné i sáhnout do projektu, jelikož se od verzí 1.0 a 1.1 změnila konfigurace aplikace.
Update z verze 2.0 na 2.1 je obecně jednoduchá, protože mezi verzemi je zaručena úplná kompatibilita. Ostatně to nově bude platit i pro další minor updaty. Tím nejbližším bude .NET Core / ASP.NET Core 2.2, který bude uvolněn v posledním čtvrtletí roku 2018.
Závěr a zkušenosti
Update na novou verzi rozhodně doporučuji především vývojářům, kteří jedou na moderním stacku .NET Core + EF Core. Technologické změny budou pro vás znamenat lepší performance, mnoho nových užitečných funkcí v EF Core a lepší možnosti patchování aplikací.
ASP.NET Core ve verzi 2.1 a 2.1 RC aktuálně používám na 2 aplikacích bežících nad .NET Core a v jednom případě nad .NET Frameworkem. Jednou z nich je i tento blog, na kterém nyní řeším jednu anomálii: občas se nevyřeší celý request a stránka zemře na timeoutu. Momentálně se nicméně zdá, že chyba bude někde v Azure App Service.
Update 1.6.2018 - Chyba byla skutečně v App Service. Těžko říci kde. Každopádně problém jsem vyřešil deployem na zcela nový slot s úplně stejným nastavením.
A jaké jsou vaše zkušenosti s ASP.NET Core?