Miroslav Holec
Premium

Novinky v instalaci a chování .NET Core 3.x

Miroslav Holec   3. prosince 2019

Č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

Install Packages

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.

Feature Bands

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).