A .NET Framework fejlesztés esetén alkalmazásunk publikálásához elÅ‘ször le kellett fordÃtanunk a programunkat Release konfigurációban. Ezt követÅ‘en rajtunk múlt, hogy hogyan szeretnénk terjeszteni az alkalmazást. Vagy készÃtettünk egy telepÃtÅ‘t, ami feltelepÃtette a szükséges keretrendszert is, mint függÅ‘séget, vagy a végfelhasználóra bÃztuk ennek a megtételét és csak egy tömörÃtett archÃvumként adtuk oda a fájlokat.
Utóbbi megoldás kényelmesebb abból a szempontból, hogy csak be kell csomagolni a fájlokat és kész. Viszont a módszer hátránya, hogy a keretrendszer maradt függőségként.
Ezen változtatott a .NET Core, mivel bevezette a lehetÅ‘séget, hogy az alkalmazásunk mellé csomagoljuk a futtatókörnyezetet is. Ezt a folyamatot hÃvjuk publikálásnak.
A publikálás egyszerű, csupán a dotnet parancsot kell meghÃvnunk megfelelÅ‘ attribútumokkal:
dotnet publish [solution.sln] -c [konfiguracio] -r [os_runtime] -o [kimeneti_konyvtar]
A parancs részei:
- [solution.sln] – A Solution fájl, amit publikálni szeretnénk
- [konfiguracio] – A publikálni kÃvánt konfiguráció Debug vagy Release lehet alapból, de újat is kreálhatunk a Visual Studio-ban
- [os_runtime] – A cél operációs rendszer azonosÃtója
- [kimeneti_konyvtar] – A kész, publikált alkalmazás ide fog mentÅ‘dni.
A -r kapcsoló és a cél operációs rendszer azonosÃtó megadása nélkül az alkalmazásunk futtatásához a felhasználóknak telepÃteniük kell majd a célzott keretrendszerünket.
A -r kapcsoló után beÃrható aktuális azonosÃtókat a https://docs.microsoft.com/en-us/dotnet/core/rid-catalog oldalon találjuk meg. .NET Core 3.0 esetén az alábbi cél operációs rendszerek támogatottak a teljesség igénye nélkül:
| AzonosÃtó | LeÃrás |
|---|---|
| win-x64 | Windows 10 X64 |
| win-x86 | Windows 10 X86 |
| win-arm | Windows 10 32 bit ARM |
| win-arm64 | Windows 10 64 bit ARM |
| linux | Linux X86 |
| linux-x64 | Linux X64 |
| linux-arm | Linux ARM 32 bit |
| linux-arm64 | Linux ARM 64 bit |
| osx-x64 | macOS 10.12 vagy újabb |
Trimmelés
A Core 3.0 újdonsága volt publikáláskor a trimmelés. Korábban, ha a keretrendszert az alkalmazás mellé csomagoltuk, akkor a teljes keretrendszer oda másolódott az alkalmazás mellé. Ez 70-100MiB mérettel is meg tudta dobni az alkalmazásunkat.
Cserébe viszont kaptunk egy, az operációs rendszerre jellemzÅ‘ futtatható bináris fájlt, ami elindÃtotta az alkalmazásunkat és a keretrendszert hozzá.
A trimmelés a keretrendszer méretét csökkenti, méghozzá úgy, hogy a nem használt (soha meg nem hÃvott) metódusokat eltávolÃtja a publikálásra kerülÅ‘ keretrendszerbÅ‘l.
A trimmelést a projektfájl módosÃtásával tudjuk bekapcsolni. A solution fÅ‘, futtatható projektjébe egy szimpatikus, vagy új <PropertyGroup> tagba kell az alábbi beállÃtást elhelyezni:
<PublishTrimmed>true</PublishTrimmed>
A trimmelés önmagában nem túl hatékony. A teljes programot és keretrendszer függÅ‘ségét egy fájlba is tudjuk publikáltatni. Ekkor egy natÃv futtatható állomány keletkezik, amit a felhasználó egy dupla kattintással el tud indÃtani.
Ennek az engedélyezéséhez az alábbi beállÃtást helyezzük el:
<PublishSingleFile>true</PublishSingleFile>
<PublishReadyToRun>true</PublishReadyToRun>
A fenti két megoldás használatával egy tipikusan 70MiB környéki alkalmazás mérete levihető 15MiB környékére, ami egy ~80% környéki méretcsökkenést jelent.
Természetesen a méretcsökkenés nagy mértékben fog függeni az adott alkalmazástól.
Ha az alkalmazásunk bizonyos szerelvényeket (dll) reflection segÃtségével tölt be, akkor külön meg kell Å‘ket jelölni, hogy ne legyenek belÅ‘le eltávolÃtva részek, mert ez problémát okozhat.
Például ha a reflection segÃtségével betöltött szerelvényünk neve Szuper.Reflection.dll, akkor az alábbi sorokkal kell kiegészÃtenünk a projektünket:
<ItemGroup>
<TrimmerRootAssembly Include="Szuper.Reflection" />
</ItemGroup>
Itt megjegyezném, hogy ha reflection segÃtségével töltünk be dolgokat, akkor a betöltÅ‘dÅ‘ szerelvény kódja nem biztos, hogy natÃv kódra át lesz fordÃtva publikáláskor. Ez némi lassulást okozhat a programunkban ahhoz képest, mint ha nem reflecion segÃtségével töltenénk be. Továbbá méretben is nagyobb futtatható fájlt kapunk.