2009-11-05 15 views
15

Me gustaría recuperar la clave AppSetting del archivo de configuración del ensamblado llamado: MyAssembly.dll.config. He aquí una muestra del fichero de configuración:¿Cómo recupero AppSettings del archivo de configuración del ensamblado?

<configuration> 
    <appSettings> 
     <add key="MyKey" value="MyVal"/> 
    </appSettings> 
</configuration> 

Aquí está el código para recuperarlo:

var myKey = ConfigurationManager.AppSettings["MyKey"]; 
+0

duplicado posible de [¿Cómo puedo leer/escribir app.config ajustes en tiempo de ejecución witho ut utilizando la configuración del usuario?] (https://stackoverflow.com/questions/3638754/how-can-i-read-write-app-config-settings-at-runtime-without-using-user-settings) – Matt

Respuesta

20

El uso de OpenMappedExeConfiguration le devuelve un objeto de "Configuración" que puede utilizar para echar un vistazo a la configuración de la biblioteca de clase (y las configuraciones que existen invalidarán las que llevan el mismo nombre en la aplicación principal config):

ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = "ConfigLibrary.config"; 

Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

AppSettingsSection section = (libConfig.GetSection("appSettings") as AppSettingsSection); 
value = section.Settings["Test"].Value; 

Pero esos valores que son exclusivos de configuración de la aplicación principal y no existen en la propia configuración de la biblioteca de clases siguen siendo accesibles a través de la clase estática ConfigurationManager:

cadena de serie = ConfigurationManager.AppSettings ["De serie"];

Eso todavía funciona: la configuración de la biblioteca de clase solo oculta las configuraciones que están dentro de su archivo de configuración; Además, debe usar la instancia "libConfig para obtener acceso a la configuración de configuración de la biblioteca de la clase también.

Los dos mundos (principal app.config, classlibrary.config) pueden coexistir totalmente y muy felizmente, no una existe un problema en absoluto!

Marc

+1

¿Qué sucede si no tengo un nodo de aplicaciones en mi archivo de configuración personalizada? Tengo el nodo . Entonces, ¿cómo obtener los nodos sin usar AppSettingsSection? – Shesha

0
var uri = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)); 
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, "MyAssembly.dll.config") }; 
var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
+0

no realmente - Obtendrás un objeto de "Configuración" de la llamada OpenMappedExeCOnfiguration, y si usas eso, entonces verás dentro de tu archivo de configuración mapeado, pero si usas el 'ConfigurationManager.AppSettings []', sigues obteniendo la aplicación principal. configs. –

0

También puede abrirlo como un XmlDocument y navegar por el documento con XPath. THEN siempre hay LinqToXml

6
var appSettings = ConfigurationManager.OpenExeConfiguration((Assembly.GetAssembly(typeof(MYASSEMBLY))).Location).AppSettings; 

entonces usted puede hacer que el anterior.

-1
Using System.Configuration 
Public Shared Function AppDomainConfiguration() As Configuration 
    Dim fileMap As New ExeConfigurationFileMap 
    fileMap.ExeConfigFilename = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 
    Return ConfigurationManager.OpenMappedExeConfiguration(fileMap,Configuration.ConfigurationUserLevel.None) 
End Function 
Cuestiones relacionadas