Ändern von App.config zur Laufzeit

8

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

Hier ist die Szene: Die Anwendung WinForms zielt darauf ab, eine WebApp zu testen, die in 5 Subsysteme unterteilt ist. Der Testprozess funktioniert mit Nachrichten, die zwischen den Subsystemen gesendet werden, und damit dieser Prozess erfolgreich ist, muss jedes Subsystem seine 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 Anwendung .config Datei mehrmals bearbeiten, aber diese Änderungen werden nur einmal wirksam. Ich habe lange nach einem Formular gesucht, um dieses Problem anzugehen, aber ich war immer noch nicht erfolgreich.

Ich weiß, dass die Problemdefinition ein wenig verwirrend sein kann, aber ich würde es wirklich schätzen, wenn mir jemand helfen würde.

Vielen Dank im Voraus!

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

Da ist etwas, das ich vorher nicht erwähnt habe. Ursprünglich ist unser System eine Webanwendung mit WCF-Aufrufen zwischen jedem Subsystem. Aus Gründen der Leistungstests (wir verwenden ANTS 4) mussten wir eine lokale Kopie der Assemblys erstellen und sie aus dem Testprojekt referenzieren. Es mag ein bisschen falsch klingen, aber wir konnten keine zufriedenstellende Möglichkeit finden, die Leistung einer Remote-Anwendung zu messen.

--- Aktualisierung beenden ---

Folgendes mache ich:

%Vor%     
born to hula 05.01.2010, 20:20
quelle

4 Antworten

3

AKTUALISIEREN

Die folgende Lösung funktionierte nicht, da XmlDocument nicht verfügbar ist und einige Versionen von .net nicht korrekt geschlossen werden, wenn ein Dateipfad angegeben wird. Die Lösung (Beispielcode in der Verknüpfung) besteht darin, einen Stream zu öffnen, der eine Entsorgung durchführt und diesen Stream an die Speicherfunktion weitergibt.

Eine Lösung wird hier gezeigt. Ссылка

Altes Zeug unter

Versuchen Sie Folgendes:

Beachten Sie, dass ich zu xpath gewechselt habe, aber es ist eine Weile her, dass ich den xpath falsch verstanden habe, aber in jedem Fall sollten Sie xpath verwenden und nicht den Baum gehen. Wie Sie sehen können, ist es viel klarer.

Der wichtige Punkt ist die using Anweisung, die dispose() ist, was ich für dein Problem hielt.

Lass es mich wissen, viel Glück.

%Vor%     
Hogan 06.01.2010, 16:43
quelle
24

Ich verstehe, dass dies ein ziemlich alter Thread ist, aber ich konnte die aufgelisteten Methoden nicht ausführen. Hier ist eine einfachere Version der UpdateAppSettings-Methode (mit .NET 4.0):

%Vor%

Sehr gut lesbar und vermeidet das Durchlaufen der app.config mit Xpath oder ähnlichem. Hinweis: Der obige Code basiert auf diesem Snippet auf MSDN.

    
dotnetguy 11.04.2012 16:34
quelle
2

Ich schätze, dass Sie das Dateihandle nicht wirklich beim ersten Mal schließen, damit Windows die späteren Änderungen nicht "sieht".

Meine Vorschläge bestehen darin, einen API-Aufruf für IIS zu verwenden und die Webanwendung (und den Pool) zu deaktivieren, die Änderung vorzunehmen und die Webanwendung zu aktivieren. Auf diese Weise können Sie sicher sein, dass die Datei erneut gelesen wird und für jeden Test eine "saubere" Umgebung vorhanden ist.

    
Hogan 05.01.2010 20:25
quelle
1

Angenommen, der Dateizugriff auf die Konfigurationsdatei wird geschlossen, nachdem die Konfigurationsdatei gelesen und verarbeitet wurde, würde ich eine Nachricht an die Anwendung senden, um sie anzuweisen, die Konfigurationsdatei erneut zu lesen, nachdem Sie die Datei aktualisiert haben. Wenn dieser Ansatz nicht funktioniert, vermute ich (wie Hogan vorgeschlagen hat), dass das Dateihandle nicht geschlossen ist. Welche Fehlercodes erhalten Sie beim Öffnen, Lesen und Schließen von Systemaufrufen? (Verwenden Sie perror , um die Fehlermeldung zu melden)

    
David Harris 05.01.2010 20:54
quelle