Novinky v instalaci a chování .NET Core 3.x
Článek se vztahuje k verzi produktu .NET Core 3.0
Tento článek byl napsán v roce 2019. 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.
Kromě nových funkcí a neustále lepší výkonnosti se mění i některé drobnosti kolem instalce .NET Core a ASP.NET Core. Na to nejdůležitější poukážu v tomto článku.
Velikost instalačního balíčku
Přestože samotný framework nám umožňuje vyvíjet nové tipy aplikací (Blazor, gRPC, WPF, WinForms), instalační SDK balíček se pro všechny platformy zmenšil.
- v případě Windows je rozdíl mezi verzí 2.1.607 a 3.0.101 cca 23 MB
- v případě macOS je rozdíl mezi stejnými verzemi SDK cca 65 MB
Součástí SDK již nejsou nástroje pro Entity Framework Core a samotný ORM není nadále součástí webového frameworku. Nástroje i NuGet balíček s ORM je nutní připojit do aplikace ručně. Stejně tak z frameworku mizí řada knihoven kolem Identity a OAuth.
SDK Feature band auto uninstall
Označení prvního písmena v trojčíslí verze SDK označuje feature band (např. ve verzi 3.0.100 je feature band 1). Pokud nainstalujete na Windows více verzi SDK v rámci stejné feature band, pak se starší verze automaticky odinstalují. V zásadě tedy po instalaci teoretických 3.0.101, 3.0.110, 3.0.199 zůstane nainstalována jen ta nejvyšší verze.
Máte-li deklarovanou preferovanou verzi SDK v souboru global.json, pak i zde funguje SDK feature band roll-forward. Je-li v global.json uvedena verze 3.0.123 a vy tuto verzi mít v PC nebudete, použije se nejbližší feature band verze (tedy maximálně 3.0.199).
SDK roll-forward
Nově můžete v souboru global.json deklarovat chování automatického výběru verze SDK. Jedná se tedy o rozšíření dosavadního SDK pinningu, v rámci kterého bylo možné vybrat jen striktní verzi SDK.
{ "sdk": { "version": "2.2.100" "allowprerelease" : false, "rollforward" : "Minor" } }
Na příkladu výše deklaruji, že vyžaduji verzi 2.2.100 SDK nebo vyšší. Zakazuji přitom, aby se používali prerelease verze SDK. Nebude-li k dispozici verze 2.2.100, použije se verze 2.2.101 - 2.2.199. Nebude-li k dispozici žádná taková verze, pravidlo Minor automaticky povolí skok na nejbližší verzi 2.3.xyz (vyšší verze se ignorují). Hodnota rollforward může být: disable, patch, feature, minor, major, latestPatch, latestFeature, latestMinor, latestMajor.
Roll-Forward pro runtimes
Vlastnost RollForward je nyní dostupná i pro csproj, které ji propisuji do runtimeconfig.json. Jestliže tedy chci, aby má aplikace běžela minimálně na verzi 3.0.1 a chci povolit jen update na nejvyšší verzi patche, použiji nastavení v csproj:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <RuntimeFrameworkVersion>3.0.1</RuntimeFrameworkVersion> <RollForward>LatestPatch</RollForward>
Politiku roll-forward provádí tzv. host, který je součástí instalačního balíčku. Publikujete-li aplikace v režimu SCD (včetně runtime), pak se roll-forward uplatní v době publikace.
Trimming
Microsoft zapojil do procesu publikace v režimu SCD nově IL Linker. Díky tomu dojde k odebrání DLL knihoven, které nejsou v rámci řešení potřeba. Tím se zmenšuje i publikační balíček v tomto režimu. Vzhledem k tomu, že SCD není výchozí způsob publikace aplikací, musí se funkce trimmingu zapnout ručně v csproj:
<PropertyGroup> <PublishTrimmed>true</PublishTrimmed> </PropertyGroup>
FDD executable
Poslední drobnost se týká kompilace aplikace. S každým sestavením aplikace dochází k publikaci do bin adresáře v režimu FDD (nic nového). Nově však není nutné spouštět aplikaci pomocí dotnet driveru předáním argumentu s název DLLky, ale vždy vznikne platform-specific executable. Na mašinách s Windows je to exe soubor, na který stačí poklepat pro spuštění. Zbytek chování je již stejný (použije se klasicky hostfx se všemi důsledky).