2012-03-26 153 views
12

Estoy desarrollando un proyecto de biblioteca de clase simple proyecto, que me dará un dll.Lea de App.config en un proyecto de biblioteca de clase

Quería leer un valor particular de un archivo de configuración. Así que agregué un archivo App.config a mi proyecto.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <appSettings> 
    <add key="serviceUrl" value="test value" /> 
    </appSettings> 

    </configuration> 

anterior es mi archivo app.config, y ahora estoy tratando de leer la siguiente

string strVal = System.Configuration.ConfigurationManager.AppSettings["serviceUrl"]; 

Pero no estoy recibiendo ningún valor en mi variable de cadena.

enter image description here

que había hecho esto para una aplicación web de una manera similar y ha funcionado. Pero de alguna manera no puedo hacer que esto funcione.

¿La idea de tener App.config en un proyecto de biblioteca de clase es correcta en primer lugar?

+0

¿Tiene varios archivos App.config? Pruebe la depuración y eche un vistazo al recuento de claves en ConfigurationManager.AppSettings; si muestra 0, supongo que VS no está detectando el archivo de configuración de la aplicación. –

+0

Tengo una sola aplicación.config, y adjunté una captura de pantalla de mi depuración – Yasser

+0

Agregue el archivo de configuración de la aplicación al proyecto principal y no al conjunto de la biblioteca de la clase. –

Respuesta

16

Como dije en mi comentario, agregue el archivo App.Config a la solución principal y no en el proyecto de la biblioteca de la clase.

+0

Tengo dos proyectos en mi solución 1. Biblioteca de clases 2. Proyecto de prueba ¿dónde lo agrego? – Yasser

+0

Probar el proyecto de prueba –

+0

¡Lo encontré! Gracias a Darren me trataron y ha añadido app.config a mi proyecto de prueba, y como yo estaba escribiendo en mi ConfigurationManager.AppSetting ... ReSharper nuevo me impulsaron sobre el que System.Configuration versión 2.0 y 4.0 recordé me lleva 4.0 antes mientras codificaba en mi proyecto de clase volví y eliminé la referencia 4.0 y agregué 2.0 una y ahora funciona !! – Yasser

6

No necesita agregar el archivo app.config. Si crea la biblioteca de clases para la aplicación basada en web, a continuación, se puede recuperar la conexión serie directamente del archivo web.config

O

Usted puede agregar cualquier archivo de texto con la cadena de conexión en ella a buscar esa cadena. usar este

public static ConnectionStringSettings ConnSettings 
{ 
    get 
    { 
     string connectionStringKey = null; 
     connectionStringKey = ConfigurationManager.AppSettings.Get("DefaultConnectionString"); 
     return ConfigurationManager.ConnectionStrings[connectionStringKey];   
    } 
} 
+0

gracias por la respuesta, y sí, ¡Bienvenido a SO! – Yasser

1

asumiendo la cuestión es buscar un archivo de configuración específica para el proyecto DLL, el archivo de configuración no es la del proyecto de aplicación aplicación o web, que utiliza el código siguiente para obtener los valores de las claves en el "sqlSection " sección. (Una precaución es que este archivo de configuración, incluso cuando está configurado para copiar siempre, no se copia automáticamente en una compilación parcial de una aplicación web, así que utilicé la increíble acción de precompilación de una línea para copiar el archivo, como mencionado en esta publicación https://stackoverflow.com/a/40158880/1935056).

aquí es el archivo de configuración de toda la DLL

<?xml version="1.0" encoding="utf-8" ?> 


<sqlSection> 

<add key="sql1" value="--statement--"/> 
</sqlSection> 

este es el código C#.

string GetSqlStatement(string key) 
    { 
      string path = Path.GetDirectoryName(Assembly.GetCallingAssembly().CodeBase) + @"\DataLayer.dll.config"; 

     XDocument doc = XDocument.Load(path); 

     var query = doc.Descendants("sqlSection").Nodes().Cast<XElement>().Where(x => x.Attribute("key").Value.ToString() == key).FirstOrDefault(); 

     if (query != null) 
     { 
      return query.Attribute("value").Value.ToString(); 
     } 
Cuestiones relacionadas