Bruchstelle B2: Alle Einstellungen des Auftragsbuchs stehen in App.config und werden über System.Configuration gelesen. Microsofts Dokumentation
nennt das einen Zwischenschritt, der auf .NET weiter funktioniert, und rät, dem Weg der Bibliotheken zu folgen: Sie lesen appsettings.json über
Microsoft.Extensions.Configuration. Diese Lektion macht den Schritt, und sie nutzt die Gelegenheit, dem Programm einen geordneten Start zu geben.
Die Grundlagen von Konfiguration, Optionen und Abhängigkeitsinjektion kennen Sie aus K2, Modul 2.3 (ASP.NET Core). Hier geht es um das, was in
einem Windows-Programm anders ist: Es gibt keinen WebApplication, der den Start übernimmt.
Ab dieser Lektion entfällt das Ziel net48. Das Mehrzielprogramm hat seinen Zweck erfüllt: Es hat Ihnen erlaubt, die Tests an beiden Laufzeiten
zu vergleichen. Konfiguration und Start nutzen Dinge, die es nur auf .NET gibt (ApplicationConfiguration, den Host). Der alte Stand liegt im
Rückfallpaket und im Git-Tag vor-net10.
Von App.config zu appsettings.json
| App.config | appsettings.json | |
|---|---|---|
| Format | XML, Abschnitte appSettings und connectionStrings |
JSON, beliebig verschachtelt |
| Lesen | ConfigurationManager.AppSettings["Name"], nur Texte |
IConfiguration, Bindung an Klassen |
| Überschreiben | pro Rechner über .config-Dateien |
Umgebungsvariablen, Befehlszeile, Benutzergeheimnisse, appsettings.<Umgebung>.json |
| Prüfen | beim Lesen, jedes Mal von Hand | beim Start, mit Regeln |
Die Werte der App.config wandern eins zu eins in die neue Datei, mit einem Abschnitt Auftragsbuch für die Einstellungen:
{
"ConnectionStrings": {
"Auftragsbuch": "Server=(localdb)\\MSSQLLocalDB;Database=Auftragsbuch;Integrated Security=SSPI"
},
"Auftragsbuch": {
"Stundensatz": 68.00,
"Anfahrtspauschale": 29.50,
"Mwst": 0.19,
"ExportOrdner": "\\\\brandt-srv01\\Buchhaltung\\Auftragsbuch",
"GruppeDisposition": "BRANDT\\Disposition"
}
}
Die Verbindungszeichenfolge steht im Abschnitt ConnectionStrings, wo GetConnectionString sie findet. Sie enthält kein Kennwort; das Programm meldet sich mit
der Windows-Anmeldung an. Kämen Geheimnisse hinzu, gehörten sie nie in diese Datei. Modul 5 (Lektion M5.3) zeigt, wohin stattdessen.
Die Datei muss mit dem Programm ausgeliefert werden. Dafür steht in der Projektdatei der Eintrag CopyToOutputDirectory mit PreserveNewest. Der Standardhost
lädt die Datei dann von selbst.
Die Reihenfolge, in der der Host Quellen liest, von der stärksten zur schwächsten, nennt Microsofts Dokumentation: Befehlszeile, Umgebungsvariablen,
Benutzergeheimnisse (nur in der Umgebung Development), appsettings.<Umgebung>.json, appsettings.json. Eine spätere Quelle überschreibt die frühere. Damit können
Sie auf einem Rechner einen Wert ändern, ohne die Datei anzufassen, etwa den Stundensatz mit der Umgebungsvariablen Auftragsbuch__Stundensatz. Zwei
Unterstriche ersetzen den Doppelpunkt.