Ändern von App.config zur Laufzeit

Ich schreibe eine Testanwendung für WinForms / C # / .NET 3.5 für das System, das wir entwickeln, und es stellte sich heraus, dass wir zur Laufzeit zwischen .config-Dateien wechseln mussten, was sich jedoch als Albtraum herausstellte.

Hier ist die Szene: Die WinForms-Anwendung zielt darauf ab, eine WebApp zu testen, die in 5 Subsysteme unterteilt ist. Der Testprozess arbeitet mit Nachrichten, die zwischen den Subsystemen gesendet werden. Damit dieser Prozess erfolgreich ist, muss jedes Subsystem eine eigene .config-Datei haben.

Für meine Testanwendung habe ich 5 separate Konfigurationsdateien geschrieben. Ich wünschte, ich könnte während der Laufzeit zwischen diesen 5 Dateien wechseln, aber das Problem ist: Ich kann die .config-Datei der Anwendung mehrmals programmgesteuert bearbeiten, aber diese Änderungen werden nur einmal wirksam. Ich habe lange nach einem Formular gesucht, um dieses Problem zu beheben, aber ich war immer noch nicht erfolgreich.

Ich weiß, dass die Problemdefinition etwas verwirrend sein kann, aber ich würde es wirklich begrüßen, wenn mir jemand helfen würde.

Danke im Voraus!

--- UPDATE 01-06-10 ---

Es gibt etwas, das ich vorher nicht erwähnt habe. Ursprünglich ist unser System eine Webanwendung mit WCF-Aufrufen zwischen den einzelnen Subsystemen. Aus Gründen des Leistungstests (wir verwenden ANTS 4) mussten wir eine lokale Kopie der Assemblys erstellen und sie aus dem Testprojekt referenzieren. Es klingt vielleicht ein bisschen falsch, aber wir konnten keine zufriedenstellende Methode finden, um die Leistung einer Remote-Anwendung zu messen.

--- Update beenden ---

Folgendes mache ich:

public void UpdateAppSettings(string key, string value)
{
    XmlDocument xmlDoc = XmlDocument.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

    foreach (XmlElement item in xmlDoc.DocumentElement)
    {
        foreach (XmlNode node in item.ChildNodes)
        {
            if (node.Name == key)
            {
                node.Attributes[0].Value = value;
                break;
            }
        }
    }

    xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

    System.Configuration.ConfigurationManager.RefreshSection("section/subSection");    
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage