Solución:
usted pueden tiene un archivo de configuración separado, pero tendrá que leerlo “manualmente”, el ConfigurationManager.AppSettings["key"]
leerá solo la configuración del ensamblado en ejecución.
Suponiendo que está utilizando Visual Studio como su IDE, puede hacer clic con el botón derecho en el proyecto deseado → Agregar → Nuevo elemento → Archivo de configuración de la aplicación
Esto agregará App.config
a la carpeta del proyecto, ponga su configuración allí debajo <appSettings>
sección. En caso de que no esté usando Visual Studio y agregue el archivo manualmente, asegúrese de darle ese nombre: DllName.dll.config, de lo contrario, el código siguiente no funcionará correctamente.
Ahora para leer de este archivo tiene tal función:
string GetAppSetting(Configuration config, string key)
{
KeyValueConfigurationElement element = config.AppSettings.Settings[key];
if (element != null)
{
string value = element.Value;
if (!string.IsNullOrEmpty(value))
return value;
}
return string.Empty;
}
Y para usarlo:
Configuration config = null;
string exeConfigPath = this.GetType().Assembly.Location;
try
{
config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
}
catch (Exception ex)
{
//handle errror here.. means DLL has no sattelite configuration file.
}
if (config != null)
{
string myValue = GetAppSetting(config, "myKey");
...
}
También deberá agregar una referencia al espacio de nombres System.Configuration para que la clase ConfigurationManager esté disponible.
Al construir el proyecto, además de la DLL, tendrá DllName.dll.config
archivo también, ese es el archivo que tiene que publicar con la propia DLL.
El anterior es un código de muestra básico, para aquellos interesados en un ejemplo a escala completa, consulte esta otra respuesta.
Desafortunadamente, solo puede tener un archivo app.config por ejecutable, por lo que si tiene DLL vinculadas a su aplicación, no pueden tener sus propios archivos app.config.
La solución es:
No es necesario que coloque el archivo App.config en el proyecto de la biblioteca de clases.
Pones el archivo App.config en la aplicación que hace referencia al dll de tu biblioteca de clases.
Por ejemplo, digamos que tenemos una biblioteca de clases llamada MyClasses.dll que usa el archivo app.config así:
string connect =
ConfigurationSettings.AppSettings["MyClasses.ConnectionString"];
Ahora, digamos que tenemos una aplicación de Windows llamada MyApp.exe que hace referencia a MyClasses.dll. Contendría una App.config con una entrada como:
<appSettings>
<add key="MyClasses.ConnectionString"
value="Connection string body goes here" />
</appSettings>
O
Un archivo xml es el mejor equivalente para app.config. Utilice xml serialize / deserialize según sea necesario. Puedes llamarlo como quieras. Si su configuración es “estática” y no necesita cambiar, también puede agregarla al proyecto como un recurso incrustado.
Espero que dé alguna idea
Los archivos de configuración son de ámbito de aplicación y no de ámbito de ensamblado. Por lo tanto, deberá colocar las secciones de configuración de su biblioteca en el archivo de configuración de cada aplicación que esté usando su biblioteca.
Dicho esto, no es una buena práctica obtener la configuración del archivo de configuración de la aplicación, especialmente el appSettings
sección, en una biblioteca de clases. Si su biblioteca necesita parámetros, probablemente deberían pasarlos como argumentos de método en constructores, métodos de fábrica, etc., por quien esté llamando a su biblioteca. Esto evita que las aplicaciones de llamada reutilicen accidentalmente las entradas de configuración que esperaba la biblioteca de clases.
Dicho esto, los archivos de configuración XML son extremadamente útiles, por lo que el mejor compromiso que he encontrado es el uso de secciones de configuración personalizadas. Puede poner la configuración de su biblioteca en un archivo XML que el marco lee y analiza automáticamente y evita posibles accidentes.
Puede obtener más información sobre las secciones de configuración personalizada en MSDN y también Phil Haack tiene un buen artículo sobre ellas.