2010-01-07 26 views
8

Tengo un problema.C#: gestionar varios archivos de App.config

Tengo un dll que está interactuando con un servicio web y guarda su configuración de punto final en su archivo app.config.

Quiero usar este dll desde mi aplicación host. La aplicación de host tiene su propio archivo de configuración. Tengo que fusionar el contenido de la configuración de dll con la configuración del host cada vez que cambie el punto final del servicio.

¿Hay alguna manera de que pueda usar ambos archivos de configuración? Entonces el dll usa su propia configuración mientras que la aplicación del host usa su propia configuración.

Respuesta

2

La forma correcta es fusionar el archivo de configuración de la DLL en el EXE; eso funcionará de la caja. Pero vea .NET DLL Settings and Config when there's a Web Reference - whats going on? para una manera de abrir explícitamente un archivo de configuración y leerlo. El problema es que primero tendrías que encontrar el archivo de configuración, y eso no es necesariamente fácil. Si el DLL está sentado, podría consultar el mismo directorio. Pero si está en el GAC, ¿a dónde miras? Sugiero seguir el camino correcto.

9

Los archivos de configuración pueden incluir archivos externos.

Si desea poner de configuración del punto final en un archivo externo, y luego incluirlo en yout anfitrión, no será necesario cambiar de configuración del host cada vez que

por ejemplo: en el archivo app.config :

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

continuación myEndpoint.config podría parecerse a lo siguiente:

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

y se puede acceder a los valores de su código, de manera similar a la lectura de la normalidad configuración de la aplicación, como que:

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

gracias newfurniturey por señalar eso! –

0

Esto puede ayudar si usted está usando svcutil para generar su proxy: comprobar los /config: y /mergeConfig interruptores, con los que se puede especificar qué archivo de configuración recibe la información generada y se puede fusionarlo en lugar de sobrescribir lo que ya está allí.

Cuestiones relacionadas