So ändern Sie den Speicherort von app.config

8

Ich möchte den Speicherort ändern, an dem meine Anwendung nach der Datei app.config sucht.

Ich weiß, dass ich mit ConfigurationManager.OpenExeConfiguration () auf eine beliebige Konfigurationsdatei zugreifen kann. Wenn das .Net Framework jedoch die Konfigurationsdatei liest (z. B. für ConnectionStrings oder EventSources), sucht es den Standardspeicherort. Ich möchte den Standort global für das gesamte .Net Framework ändern (natürlich für meine Anwendung).

Ich weiß auch, dass ich AppDomainSetup verwenden kann, um den Speicherort von app.config für eine neue AppDomain zu ändern. Dies gilt jedoch nicht für die primäre Anwendungsdomäne der Anwendung.

Ich weiß auch, dass ich die Funktion Main () überschreiben und eine neue AppDomain wie oben erstellen und meine Anwendung in dieser neuen AppDomain ausführen kann. Das hat jedoch andere Nebenwirkungen - zum Beispiel gibt Assembly.GetEntryAssembly () eine Nullreferenz zurück.

Wenn ich bedenke, wie alles andere in .Net funktioniert, würde ich erwarten, dass es eine Möglichkeit gibt, die Startumgebung meiner Anwendung zu konfigurieren - über ein Anwendungsmanifest oder ähnliches -, aber ich konnte nicht einmal einen Hoffnungsschimmer finden in diese Richtung.

Jeder Zeiger wäre hilfreich.

David Mullin

    
David Mullin 03.09.2010, 01:18
quelle

3 Antworten

9

Ich habe den Ansatz verwendet, um eine andere AppDomain von Main () zu starten und den "neuen" Speicherort der Konfigurationsdatei anzugeben.

Keine Probleme mit GetEntryAssembly (); es gibt nur null zurück, wenn es aus nicht verwaltetem Code aufgerufen wird - oder zumindest nicht für mich, da ich ExecuteAssembly () zum Erstellen / Ausführen der zweiten Anwendungsdomäne verwende, etwa so:

%Vor%

Beachten Sie, dass wir die EXE effektiv neu ausführen, genauso wie eine AppDomain und mit einer anderen Konfiguration. Beachten Sie auch, dass Sie eine "magische" Option haben müssen, die verhindert, dass dies endlos weiter geht.

Ich habe das aus einem größeren (echten) Codeabschnitt herausgearbeitet, also funktioniert es vielleicht nicht so wie es ist, aber sollte das Konzept veranschaulichen.

    
Christian.K 03.09.2010, 05:00
quelle
0

Ich bin nicht sicher, warum Sie den Speicherort Ihrer Konfigurationsdatei ändern möchten - vielleicht kann es einen anderen Ansatz zur Lösung Ihres eigentlichen Problems geben. Ich hatte eine Anforderung, wo ich Konfigurationsdatei über verwandte Anwendungen teilen wollte - ich hatte gewählt, eigene XML-Datei zu verwenden, da es mir zusätzlichen Vorteil gegeben hatte, vollständige Kontrolle über das Schema zu haben.

In Ihrem Fall ist es möglich, Abschnitte Ihrer Konfigurationsdatei mithilfe der Eigenschaft configSource in eine separate Datei zu externalisieren. Siehe hier unter "Verwenden externer Konfigurationsdateien", um zu überprüfen, wie dies im Abschnitt Verbindungszeichenfolgen geschehen ist . Vielleicht kann dir das helfen.

    
VinayC 03.09.2010 04:54
quelle
0
%Vor%

Dann benutze config member wie du willst.

    
Berezh 26.03.2013 16:43
quelle

Tags und Links