Alapfogalmak
A Komod csomag
A telepíthető egység a .komod fájl: egy zip. Egy csomag egy vagy több Komodot, és opcionálisan böngészős felületet tartalmaz.
komod.json manifest (a build / kofa-pack generálja)
server/*.dll szerver assembly-k és a privát függőségeik
client/*.dll opcionális: Blazor UI assembly-k
wwwroot/ opcionális: statikus fájlok (JS modul, CSS, kép), README
Azonosítás és verzió
| Mező | Szabály |
|---|---|
Csomag azonosító (KomodPackageId) |
Kisbetűs, ponttal vagy kötőjellel tagolt, stabil (pl. acme.demo.thermostat). |
Verzió (KomodPackageVersion) |
SemVer. Minden kiadásnál emeld. Azonos verzió újratöltése újratelepítésnek számít, és a Komod tár nem cseréli le a már közzétett verziót. |
Komod azonosító ([Komod("…")]) |
A csomagon belüli Komodok azonosítója. Verziók között nem változhat. |
Ezeket a Package.props tartalmazza, a szerver és a UI projekt közösen használja. A sablon az Acme.Demo.Thermostat esetén ezt hozza létre:
<Project>
<!-- Package identity, shared by the server and the UI project. Bump KomodPackageVersion for every release. -->
<PropertyGroup>
<KomodPackageId>acme.demo.thermostat</KomodPackageId>
<KomodPackageVersion>1.0.0</KomodPackageVersion>
<KomodDisplayName>Termosztát</KomodDisplayName>
<KomodDescription>Hiszterézises termosztát: a hőmérséklet alapján kapcsolja a fűtést.</KomodDescription>
<Authors>Acme Kft.</Authors>
<!-- UI assemblies in load order (their private dependencies first). -->
<KomodClientAssemblies>"Acme.Demo.Thermostat.Ui.dll"</KomodClientAssemblies>
<!-- Kofa.Abstractions NuGet version. -->
<KofaSdkVersion>0.0.0-kofa-sdk</KofaSdkVersion>
</PropertyGroup>
</Project>
Betöltés és hot reload
- Minden (csomag, verzió) pár saját, kiüríthető betöltési környezetbe kerül, ezért a csomag futás közben telepíthető, frissíthető és eltávolítható a szerver újraindítása nélkül.
- Frissítésnél a példányok egyenként átindulnak az új verzióra; a beállításaik és a gráfbeli kötéseik megmaradnak.
- A
Kofa.Abstractions*és a KOFA keretrendszer a hosztból jön, így a típusok közösek a Komodok között. Ezeket nem kell (és nem is szabad) a csomagba másolni; a build automatikusan kihagyja őket. - A böngésző rész (
client/*.dll) a böngészőben töltődik be a megnyitáskor. WebAssemblyben nincs kitöltés: egy megváltozott UI dll azonos verziónál csak oldalfrissítés után érvényes.
Függőségek
A saját NuGet csomagjaid és projekthivatkozásaid a csomag mellé kerülnek. Kimarad, amit a host már tartalmaz: Kofa.Abstractions*, System.*, Microsoft.Extensions.*, Microsoft.AspNetCore.*, Microsoft.JSInterop, Microsoft.FluentUI.*. A UI projekt saját függőségeit a KomodClientAssemblies listába is fel kell venni, betöltési sorrendben (előbb a függőség). Natív könyvtárak: Natív függőségek.
Biztonság és ellenőrzés
- A telepítést csak Admin végezheti. A csomagról SHA-256 hash készül, a telepítés előtt megmutatja az előnézet.
- A
kofa-packellenőrzi a csomagot: betölti, kiolvassa a Komodokat és portokat, figyelmeztet, ha a UI olyan framework assemblyre hivatkozik, amely a kiadott (trimmelt) kliensben nem teljes (ilyenkor futás közbenMissingMethodExceptionjöhetne).
Méret és trimming
A böngészős kliens kiadott változata trimmelt: nem minden .NET framework API érhető el a UI kódban. A gyakoriak (System.Linq, System.Text.Json, gyűjtemények, a Blazor komponensek) igen. Ha a UI olyat használ, ami nincs, a kofa-pack figyelmeztet; ilyenkor kerüld azt az API-t, vagy írd meg a szerver oldalon és kérd le parancsként. Egy assemblyn belül is hiányozhat egy-egy tag (pl. a Uri egyes metódusai); a program export (Lite) tagonként ellenőrzi a UI-t a futtató kliense ellen, és megnevezi a hiányzó típust vagy tagot.