2008-09-30 24 views
11

Tenemos un "motor" que carga dlls dinámicamente (lo que está ubicado en un directorio determinado) y llama a las clases de Workflow desde ellos a modo de reflexión.App.config para dll

Ahora tenemos algunos nuevos flujos de trabajo que requieren acceso a una base de datos, por lo que pensé que iba a poner un archivo de configuración en el directorio DLL.

Pero por alguna razón mis flujos de trabajo simplemente no ven el archivo de configuración.

<configuration> 
    <appSettings> 
     <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" /> 
    </appSettings> 
</configuration> 

Dado el archivo de configuración anterior, el siguiente código imprime una cadena vacía:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]); 

Creo que lo que quiero es simplemente especificar un nombre de archivo de configuración, pero estoy teniendo problemas aquí. Simplemente no estoy obteniendo resultados. ¿Alguien tiene alguna indicación?

+0

Creo que deberías hacer referencia a mi vídeo para tener una idea http://www.youtube.com/watch?v=juBDM3fb-i0 –

Respuesta

7

Si el código de ejemplo para la lectura de los AppSettings está en su DLL, entonces se intentará leer el archivo de configuración de la aplicación y no el archivo de configuración para el archivo DLL. Esto se debe a que está utilizando Reflection para ejecutar el código.

+0

Gracias. Eso lo resolvió – daharon

4

divertido, donde estoy que estamos haciendo algo muy similar y se carga el archivo de configuración muy bien. En nuestro caso, creo que el nombre de cada nuevo archivo de configuración coincide con el de su ensamblaje asociado. Así que MyLibrary.dll tendría un archivo llamado MyLibrary.dll.config con información para ese conjunto de archivos. Además, el ejemplo que tengo a mano es usar VB.Net en lugar de C# (tenemos algunos de cada uno) y todas las configuraciones allí son para el espacio de nombres My.Settings específico de VB, por lo que no usamos la clase ConfigurationManager directamente para léalos

Los ajustes a sí mismos tener este aspecto:

<applicationSettings> 
    <MyLibrary.My.MySettings> 
     <setting name="SomeSetting" serializeAs="String"> 
      <value>12345</value> 
     </setting> 
    </MyLibrary.My.MySettings> 
</applicationSettings> 
0

Si no recuerdo mal, el app.config serán cargados desde el directorio de la aplicación, por lo que si va a cargar DLL de algún otro directorio, querrá las claves que necesitan en el archivo de configuración de su aplicación.

+0

Gracias. Ese parece ser mi problema. Cambié las cosas y ahora funciona. – daharon

0

no estoy totalmente seguro pero creo que esa clase sólo funciona con la trayectoria del método de entrada del dominio de aplicación (el camino de la exe mayor parte del tiempo) de forma predeterminada. Primero debe llamar a OpenExeConfiguration (string exePath) (Framework 2.0 y posterior) para que apunte a un archivo de configuración diferente.

1

Escribí esto para un sistema similar. Mi recuerdo es que utilicé Assembly.GetExecutingAssembly para obtener la ruta del archivo a la DLL, anexé .config a ese nombre, lo cargué como XmlDocument, navegué al nodo <appSettings> y lo pasé al método NameValueSectionHandlerCreate.

1

Aquí hay una forma: AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "ruta al archivo de configuración");

Llamar al constructor.

Cuestiones relacionadas