Pakete im Überblick

Die Komponenten werden einzeln ausgeliefert, je Komponente ein NuGet-Paket mit eigener Version. Eine Anwendung nimmt also genau die Pakete, die sie braucht, und hebt sie einzeln an.

Welche Pakete es gibt

Paket Was drin ist Demo
FMH.Komponente.Analyse fertige Support-Seite unter /Analyse Analyse
FMH.Komponente.Basis Formular-Templates (EditorTemplates, DisplayTemplates), HTML-Helfer, die clientseitigen Grundfunktionen Basis
FMH.Komponente.Basis.Validierung die DataAnnotation-Attribute, der Metadaten-Anbieter, die Template-Namen UiDisplay.Basis, UiEditor.Basis und die Metadaten-Schlüssel UiMetadata.Basis Basis.Validierung
FMH.Komponente.BenutzerPraesenzCheck erkennt Inaktivität und meldet ab BenutzerPraesenzCheck
FMH.Komponente.CorporateDesign Schriften, Symbole und das Grundgerüst der Gestaltung keine
FMH.Komponente.FileUpload Ablagefläche, Dokumentliste, die zwei EditorTemplates FileUpload
FMH.Komponente.FileUpload.Validierung die Upload-Attribute, die Dokumentmodelle, die Template-Namen UiEditor.FileUpload und die Metadaten-Schlüssel UiMetadata.FileUpload FileUpload.Validierung
FMH.Komponente.Infrastruktur Bündelung von JavaScript und SCSS, Modulkatalog, MVC-Bausteine, Fehlerseiten Infrastruktur
FMH.Komponente.Infrastruktur.Schnittstellen nur die Verträge, ohne jede Abhängigkeit keine (kein eigener Baustein)
FMH.Komponente.Kompetenzen LikertSkala und FrageAntwort Kompetenzen
FMH.Komponente.Kompetenzen.Validierung die Modelle der LikertSkala und der FrageAntwort und die Template-Namen UiEditor.Kompetenzen Kompetenzen.Validierung (nur Referenz, kein eigener Baustein)
FMH.Komponente.PDFViewer Anzeige von PDF und Bildern samt Werkzeugleiste PDFViewer
FMH.Komponente.RichText formatierter Texteditor auf Quill-Basis RichText
FMH.Komponente.RichText.Validierung die Template-Namen UiEditor.RichText, ohne jede Abhängigkeit RichText.Validierung (nur Referenz, kein eigener Baustein)
FMH.Komponente.Serilog.Ingestion der Endpunkt, der diese Ereignisse entgegennimmt siehe Logging
FMH.Komponente.Serilog.Sinks.Blazor.WASM dasselbe für Blazor-WASM siehe Logging
FMH.Komponente.Serilog.Sinks.JavaScript Logging aus dem Browser, als ES-Modul siehe Logging
FMH.Komponente.Tabelle Raster mit Spalten, Aktionen, Unterzeilen, Mehrfachauswahl Tabelle
FMH.Komponente.Wizard mehrstufige Formularstrecke Wizard

Die Spalte «Demo» nennt das Paket in der Navigation links. Pakete ohne Demo bringen keinen eigenen Baustein mit, sondern Verträge, Gestaltung oder einen Endpunkt.

Sub-Komponenten

Fünf Pakete tragen den Namen ihrer Hauptkomponente mit einem Zusatz: Basis.Validierung, FileUpload.Validierung, Kompetenzen.Validierung, RichText.Validierung und Infrastruktur.Schnittstellen. Sie wurden aus der jeweiligen Komponente herausgetrennt, damit ein Projekt den kleinen Teil allein beziehen kann.

Für den Regelfall ändert das nichts. Die Hauptkomponente verweist auf ihre Sub-Komponente, wer sie referenziert, bekommt alles wie vorher, und die Namespaces sind beim Umzug unverändert geblieben. Wann sich der einzelne Bezug lohnt und was dabei fehlt, steht in Sub-Komponenten einzeln referenzieren.

Ein Paket einbinden

<ItemGroup>
  <PackageReference Include="FMH.Komponente.Basis" Version="..." />
</ItemGroup>

Arbeitet das Projekt mit zentraler Paketverwaltung (ManagePackageVersionsCentrally), gehört die Version stattdessen als <PackageVersion Include="..." Version="..." /> in die Directory.Packages.props, und die PackageReference bleibt ohne Version.

Der Feed. FMH-Pakete liegen nicht auf nuget.org, sondern im Azure-DevOps-Feed Fmh_Framework_NuGet_Feed. Er gehört in die NuGet.config der Projektmappe, zusammen mit dem Package-Source-Mapping, das FMH.* ausschliesslich dort sucht:

<configuration>
  <packageSources>
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Fmh_Framework_NuGet_Feed"
         value="https://pkgs.dev.azure.com/fmhdev/_packaging/Fmh_Framework_NuGet_Feed/nuget/v3/index.json" />
  </packageSources>
  <packageSourceMapping>
    <packageSource key="Fmh_Framework_NuGet_Feed">
      <package pattern="FMH.*" />
    </packageSource>
    <packageSource key="nuget.org">
      <package pattern="*" />
    </packageSource>
  </packageSourceMapping>
</configuration>

Ohne den Feed schlägt die Wiederherstellung mit NU1101 fehl, ohne Anmeldedaten mit 401.

Transitive Pakete nicht selbst eintragen

Jedes Paket bringt seine Abhängigkeiten mit, samt einer Mindestversion, die es von ihnen verlangt. FMH.Komponente.FileUpload zieht damit Tabelle, PDFViewer, Basis und Infrastruktur nach, ohne dass eine dieser Zeilen im eigenen Projekt steht. Eine zusätzliche PackageReference auf ein transitives Paket ist nur nötig, wenn das Projekt es selbst anspricht.

Alle gemeinsam heben

Wandert ein Typ von einem Paket in ein anderes, wie bei den Sub-Komponenten geschehen, bleibt der Quelltext gültig, das Kompilat aber nicht: Eine Assembly, die vorher übersetzt wurde, sucht den Typ weiter im alten Paket und bricht mit «claims it is defined in» ab.

Deshalb gilt bei einem solchen Sprung: alle FMH-Pakete gemeinsam auf den neuen Stand heben und einmal vollständig neu bauen, in Visual Studio «Rebuild Solution». Ein inkrementeller Build genügt nicht.