2010-01-07 4 views
8

Je suis confronté à un problème.C#: gérer plusieurs fichiers App.config

J'ai une DLL qui interagit avec un service Web et enregistre sa configuration de point de terminaison dans son fichier app.config.

Je souhaite utiliser cette DLL à partir de mon application hôte. L'application hôte a son propre fichier de configuration. Je dois fusionner le contenu de la configuration de dll à la configuration de l'hôte chaque fois que je change de point de terminaison de service.

Y at-il un moyen que je peux utiliser les deux fichiers de configuration. La DLL utilise donc sa propre configuration tandis que l'application hôte utilise sa propre configuration.

Répondre

2

La bonne façon est de fusionner le fichier de configuration de la DLL dans les EXE; ça va marcher hors de la boîte. Mais voyez .NET DLL Settings and Config when there's a Web Reference - whats going on? pour un moyen d'ouvrir explicitement un fichier de configuration et de le lire. Le problème est que vous devez d'abord TROUVER le fichier de configuration, et ce n'est pas forcément facile. Si la DLL est juste assis, vous pouvez vérifier le même répertoire. Mais si c'est dans le GAC, où regardez-vous? Je suggère de rester dans le bon sens.

9

Les fichiers de configuration peuvent inclure des fichiers externes.

Si vous mettez sur un fichier externe de configuration du point d'extrémité, puis l'inclure dans l'hôte yout, vous aurez pas besoin de changer la configuration de l'hôte chaque fois

par exemple: dans votre fichier app.config :

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

alors myEndpoint.config pourrait ressembler à ça:

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

et vous pouvez accéder aux valeurs de votre code, de façon similaire à la lecture normale paramètres de l'application, comme ça:

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

merci newfurniturey pour le signaler! –

0

Cela peut être utile si vous utilisez svcutil pour générer votre proxy: vérifier les /config: et /mergeConfig commutateurs, avec ceux que vous pouvez spécifier le fichier de configuration reçoit les informations générées et vous pouvez fusionner au lieu de simplement écraser tout ce qui est déjà là.