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>&quot;Acme.Demo.Thermostat.Ui.dll&quot;</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-pack ellenő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özben MissingMethodException jö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.