Ändern Sie die Standard-App.config während der Laufzeit dynamisch
Um Module, die Konfigurationselemente erfordern, dynamisch zu laden, ist eine Möglichkeit erforderlich, eine neue app.config im Speicher zu erstellen, die verschiedenen Abschnitte des Moduls zu konsolidieren und die Anwendung von der Anwendung verwenden zu lassen, ohne die Standard-app.config zu überschreiben.
Für dieses Problem haben wir eine Lösung gefunden, die der in der Frage vorgeschlagenen ähnelt. Der bereitgestellte Code führt jedoch nicht zu den erwarteten Ergebnissen. Die in der verknüpften Frage erwähnte Methode funktioniert nur, wenn sie vor der Konfiguration des Systems für die erste Verwendung durchgeführt wird. Zwischengespeicherte Werte in der ClientConfigPaths-Klasse verhindern, dass neue Konfigurationen nach der ersten Verwendung gelesen werden.
Daher löscht diese Lösung auch diese zwischengespeicherten Werte. Der folgende Code erfüllt diese Aufgabe:
<code class="language-csharp">public abstract class AppConfig : IDisposable { // ... } private class ChangeAppConfig : AppConfig { // ... private static void ResetConfigMechanism() { // ... typeof(ConfigurationManager) .Assembly.GetTypes() .Where(x => x.FullName == "System.Configuration.ClientConfigPaths") .First() .GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, null); } }</code>
Mit diesem Code wird die neue app.config gelesen und verwendet, wenn die Anwendung ausgeführt wird. Die standardmäßige app.config kann durch Freigeben der AppConfig-Instanz wiederhergestellt werden. Wenn eine dauerhafte Änderung erforderlich ist, können Sie diese ohne Verwendung der AppConfig.Change-Methode durchführen und sie am Anfang der Anwendung platzieren.
Das obige ist der detaillierte Inhalt vonWie kann ich die App.config zur Laufzeit dynamisch ändern, ohne den Standard zu überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!