Miroslav Holec
Premium

Uvolněn (ASP.NET) Core 2.1.0, EF Core 2.1.0 - tipy na update

Miroslav Holec   31. května 2018  update 1. června 2018

Článek se vztahuje k verzi produktu ASP.NET Core 2.1

Tento článek je již zastaralý. Článek 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.

Azure Console

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?