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:

JSON
{
  "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.