2011-11-25 13 views
6

estoy accediendo a un archivo de configuración de esta manera:acceso Programatically web.config arbitraria - no puede acceder appsettings (app.config está muy bien)

var map = new ConfigurationFileMap(configPath); 
var config = ConfigurationManager.OpenMappedMachineConfiguration(map); 
config.AppSettings.Settings.Add("SomeSetting", "SomeValue"); 

Funciona bien para cualquier archivo exe.config, pero no para ningún web.config.

Nota: No estoy tratando de acceder al web.config de la aplicación actual, intento de modificar el web.config en una trayectoria arbitraria.

(He intentado WebConfigurationManager en lugar de ConfigurationManager, pero da resultados idénticos)

La excepción es lanzada por el descriptor de acceso AppSettings propiedad - que tratan de GetSection("appSettings") y lo echó a un AppSettingsSection por supuesto gievs la misma excepción. De cualquier manera, aquí está:

System.InvalidCastException: Unable to cast object of type 'System.Configuration.DefaultSection' to type 'System.Configuration.AppSettingsSection'. 

, obviamente, he buscado en torno, pero se han encontrado sólo las personas el acceso a web.config para la 'aplicación web actual' o utilizando XmlDocument/XDocument.

Mi conjetura es exe.config archivos automáticamente obtienen alguna información de tipo configSections deducido correctamente lo que significa que sabe cómo tratar con appsettings. Sin embargo no tengo ni idea de por qué, basado en el nombre del archivo, que no funcionaría con web.config.


Ah. Para app.config estoy usando OpenExeConfiguration:

// works fine for .exe.config 
var config = ConfigurationManager.OpenExeConfiguration("some-assembly-here.exe"); 
config.AppSettings.Settings.Add("SomeSetting", "SomeValue"); 
config.Save(); 

Aquí estoy usando OpenMappedMachineConfiguration que parece ser para machine.config, sin embargo no puedo ver otra manera de abrir un archivo web.config arbitraria - cualquier persona ?

+0

Así que si cambia el nombre del web.config para web.exe.config entonces todo funciona como se espera? –

+0

Huh, nop, el mismo problema. Podría ser debido a web.exe (o test.exe Test.exe.config como yo he intentado) no existe .. No, no es eso. Déjame ver esta diferencia entre mis configuraciones ... –

+0

[Ver última edición: exe.config estoy usando un método diferente que funciona] –

Respuesta

9

Mi error - Puedo utilizar OpenMappedExeConfiguration bien cuando se abren archivos web.config:

  var map = new ExeConfigurationFileMap(); 
      map.ExeConfigFilename = configPath; 
      var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 
Cuestiones relacionadas