2010-01-07 8 views
8

Ich stehe vor einem Problem.C#: Mehrere App.config-Dateien verwalten

Ich habe eine DLL, die mit einem Webservice interagiert und speichert ihre Endpunktkonfiguration in seiner app.config-Datei.

Ich möchte diese DLL von meiner Host-Anwendung verwenden. Die Host-Anwendung hat ihre eigene Konfigurationsdatei. Ich muss den Inhalt der DLL-Konfiguration jedes Mal in die Konfiguration des Hosts einbinden, wenn ich den Dienstendpunkt ändere.

Gibt es eine Möglichkeit, dass ich beide Konfigurationsdateien verwenden kann. Die DLL verwendet also ihre eigene Konfiguration, während die Host-Anwendung ihre eigene Konfiguration verwendet.

Antwort

2

Der richtige Weg ist, die Konfigurationsdatei der DLL in die EXEs zusammenzuführen; das wird aus der Box funktionieren. Aber siehe .NET DLL Settings and Config when there's a Web Reference - whats going on? für eine Möglichkeit, eine Konfigurationsdatei explizit zu öffnen und zu lesen. Das Problem ist, dass Sie zuerst die Konfigurationsdatei finden müssen, und das ist nicht unbedingt einfach. Wenn die DLL nur herum sitzt, könnten Sie das gleiche Verzeichnis überprüfen. Aber wenn es in der GAC ist, wo schaust du hin? Ich schlage vor, auf dem richtigen Weg zu bleiben.

9

Konfigurationsdateien können externe Dateien enthalten.

Wenn Sie den Endpunkt der Config auf eine externe Datei setzen würde, und es dann in yout Host gehören, werden Sie nicht jedes Mal

zB die Host-Konfiguration ändern müssen: in Ihrer Datei app.config :

... 
<configSections> 
    ... 
    <section name="myEndpoint" type="System.Configuration.DictionarySectionHandler" /> 
    ... 
</configSections> 
... 
<myEndpoint configSource="myEndpoint.config" /> 

dann könnte myEndpoint.config so aussehen:

<?xml version="1.0" encoding="utf-8"?> 
<myEndpoint> 
    <add key="myKey" value="myValue" /> 
</myEndpoint> 

und die Werte aus dem Code normalen zugreifen können, ähnlich wie das Lesen App-Einstellungen, wie folgt aus:

var myEndpointConfig = (Hashtable)ConfigurationManager.GetSection("myEndpoint"); 
Console.WriteLine(myEndpointConfig["myKey"]); 
+0

danke newfurnitury für das hinweisend! –

0

Dies kann helfen, wenn Sie svcutil verwenden, um Ihre Proxy zu generieren: überprüfen Sie die /config: und /mergeConfig Schalter, mit denen können Sie angeben, welche Konfigurationsdatei den generierten Informationen empfängt und Sie können es fusionieren anstatt einfach alles zu überschreiben, was schon da ist.

Verwandte Themen