Konfiguration von C#-Anwendungen (.NET): vollständige Anleitung
Die Verwaltung der Konfiguration ist eine der zentralen Aufgaben bei der Entwicklung moderner Anwendungen in C# (.NET). Die Bibliothek Microsoft.Extensions.Configuration bietet einen leistungsstarken und flexiblen Mechanismus zum Lesen von Einstellungen aus verschiedenen Quellen: JSON-Dateien, Umgebungsvariablen, Befehlszeilenargumenten und Geheimnissen. In diesem Artikel werden wir im Detail besprechen, wie Sie die Konfiguration in .NET-Anwendungen unter Verwendung bewährter Methoden und Codebeispiele einrichten.
Hauptfunktionen der Bibliothek
- Mehrere Datenquellen: JSON, XML, INI, Umgebungsvariablen, Befehlszeilenargumente, Azure Key Vault und andere.
- Hierarchische Struktur: Unterstützung für verschachtelte Abschnitte durch Schlüssel mit Doppelpunkt (
Section:Subsection:Key). - Bindung an Klassen (Options Pattern): automatisches Befüllen von POCO-Objekten aus der Konfiguration.
- Flexibles Überschreiben: Die zuletzt hinzugefügte Quelle hat Priorität.
- Unterstützung für Geheimnisse: Für die Entwicklung —
Secret Manager, für die Produktion — geschützte Speicher.
Installation und Einbindung
Um mit der Konfiguration in einer .NET-Anwendung (Konsolenanwendung, ASP.NET Core, MAUI usw.) zu arbeiten, muss das NuGet-Paket installiert werden:
dotnet add package Microsoft.Extensions.Configurationdotnet add package Microsoft.Extensions.Configuration.Jsondotnet add package Microsoft.Extensions.Configuration.EnvironmentVariablesdotnet add package Microsoft.Extensions.Configuration.CommandLineIn ASP.NET Core sind diese Pakete standardmäßig bereits enthalten.
Basisbeispiel: Lesen aus appsettings.json
Erstellen wir eine Datei appsettings.json:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning" } }, "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=MyDb;User Id=sa;Password=MyPass;" }, "AppSettings": { "AppName": "MyApp", "Version": "1.0.0", "MaxRetries": 3 }}Code zum Lesen der Konfiguration in einer Konsolenanwendung:
using Microsoft.Extensions.Configuration;
class Program{ static void Main(string[] args) { // Konfiguration erstellen var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables() .AddCommandLine(args) .Build();
// Einfache Werte lesen string appName = configuration["AppSettings:AppName"]; Console.WriteLine($"App Name: {appName}");
// Verschachtelte Abschnitte lesen string connString = configuration.GetConnectionString("DefaultConnection"); Console.WriteLine($"Connection String: {connString}");
// Ganze Zahl lesen int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]); Console.WriteLine($"Max Retries: {maxRetries}");
// Ganzen Abschnitt abrufen var appSettingsSection = configuration.GetSection("AppSettings"); Console.WriteLine($"Version: {appSettingsSection["Version"]}"); }}Options-Muster (Bindung an Klassen)
Die beste Praxis ist die Verwendung einer stark typisierten Konfiguration über IOptions<T>. Dazu:
- Erstellen Sie eine Klasse für den Konfigurationsabschnitt:
public class AppSettings{ public string AppName { get; set; } public string Version { get; set; } public int MaxRetries { get; set; }}- Registrieren Sie die Konfiguration im DI-Container (für ASP.NET Core oder mit
Micros
Auch in der Bibliothek
Arbeiten mit YAML in TypeScript: Vollständiger Leitfaden zum Parsen und Serialisieren
CLI-Frameworks für Java: Picocli, JCommander und Spring Shell
ts-functional-pipe TypeScript: Komplettleitfaden mit Beispielen
Bouncy Castle Java: Vollständige Anleitung mit Beispielen