Usando app.config con una biblioteca de clase

Con frecuencia necesito crear una biblioteca de clases .Net que requiera app.config para cosas como cadenas de conexión de bases de datos. Sin embargo, estas configuraciones deben estar en app.config o web.config de la aplicación llamante. Si quiero distribuir el archivo DLL a través de múltiples aplicaciones, se convierte en un problema porque tengo que copiar estas configuraciones en cada aplicación app.config.

He considerado leer manualmente las configuraciones de configuración a través del código desde dentro de la biblioteca de clases, pero eso también es un gran problema. ¿Alguien tiene alguna sugerencia sobre la mejor forma de cargar la configuración de app.config dentro de una biblioteca de clases?

Una cosa que podría hacer es tener un archivo de configuración separado solo para su biblioteca, entonces solo tiene que tener una referencia en el archivo de configuración de la aplicación de entrada.

Consulte la respuesta aceptada en esta pregunta para obtener información sobre esto.

Sé que no es lo que quieres escuchar, pero el archivo de configuración del punto de entrada es el lugar lógico para poner estos ajustes. Si cada biblioteca necesitara su propio archivo de configuración, sería tedioso tener que editar cada archivo en lugar de solo uno.

Tendría un archivo de texto con la configuración predeterminada incluida como parte de su biblioteca (y como parte del proyecto) que se puede distribuir con la biblioteca para la configuración de configuración predeterminada (se puede copiar y pegar en el archivo de configuración).

Haga que cada biblioteca de clase defina la configuración en una sección de configuración personalizada.

A continuación, agregue manejadores de sección personalizados a su archivo process.exe.config.

Este artículo de MSDN es bastante completo en su explicación, con ejemplos tanto en VB como en C #.

Se trata de escribir un código bastante repetitivo: Dmitryr creó esta herramienta para generar las secciones de configuración a partir de un fragmento de una configuración XML, que podría ser útil.

Aquí hay una alternativa.

En lugar de intentar encontrar formas de “fusionar” sus descargas de aplicaciones, o incluso colocar elementos de configuración en su archivo DLL (e intentar solucionar lo que es “por diseño”) en primer lugar, intente esto:

Crea tu DLL, pero donde necesites un ítem de configuración, crea una propiedad pública. Cuando crea una instancia de la clase en la DLL, rellena estas propiedades con elementos de configuración de la aplicación propietaria.

Ahora la configuración se gestiona a nivel de propietario y la DLL es portátil, ya que debe pasar lo que necesita en tiempo de ejecución.

¡No más DLL.config!

Vaya a Propiedades de la aplicación -> pestaña Configuración; agregue su configuración allí.

Use Properties.Settings.Default. para acceder a la configuración. ¡Eso es!

No es un (gran) problema usar su propio archivo de configuración para cada biblioteca de clase. Si usa vb.net, puede agregar valores a través del panel “mi proyecto” en la página “Configuración”.

Lo único que debe hacer es llamar a “My.Settings.Save” en la configuración de la biblioteca de su clase (y no solo en el archivo de configuración de la aplicación principal).

Eso también funciona con c # (pero probablemente necesite más trabajo manual).

Si está usando NUnit , nombre su archivo app.config con el mismo nombre que su * .nunit project filename. Entonces, por ejemplo, si llamó a su proyecto “ClassLibraryA.nunit”, entonces nombre su archivo de configuración de biblioteca de clase “ClassLibraryA.config”. También necesitan residir en la misma carpeta / directorio. NUnit en realidad está usando esto como el archivo de configuración principal.

Si tiene un código personalizado , entonces necesita asegurarse de que su app.config (o web.config) esté haciendo referencia al archivo app.config de la biblioteca de la clase. La aplicación solo se preocupa por la raíz app.config o web.config. Por lo tanto, debe agregar una sección de configuración personalizada que apunte a la biblioteca de clases app.config.

Puede crear su propio archivo XML (llámelo como appConfig.xml o algo si lo desea), use System.Xml en lugar de System.Configuration para leerlo e inclúyalo junto con su dll.

Crea tu biblioteca de clase en una solución diferente. Si los mantiene en la misma solución, la app.config en la jerarquía más alta se leerá.