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.