我正在访问配置文件:
var map = new ConfigurationFileMap(configPath);
var config = ConfigurationManager.OpenMappedMachineConfiguration(map);
config.AppSettings.Settings.Add("SomeSetting", "SomeValue");
它适用于任何.exe.config文件,但不适用于任何web.config。
注意:我没有尝试访问当前应用程序的web.config,我试图在任意路径中修改web.config。
(我已尝试WebConfigurationManager
而不是ConfigurationManager
,但它会得到相同的结果)
AppSettings
属性访问者抛出异常 - 尝试GetSection("appSettings")
并将其强制转换为AppSettingsSection
当然是相同的异常。不管怎样,这里是:
System.InvalidCastException: Unable to cast object of type 'System.Configuration.DefaultSection' to type 'System.Configuration.AppSettingsSection'.
我显然已经四处搜索,但发现只有人访问“当前网络应用”的web.config或使用XmlDocument
/ XDocument
。
我的猜测是.exe.config文件会自动获得一些推断的configSections类型信息,这意味着它正确地知道如何处理appSettings。但是我不知道为什么,根据文件名,它不适用于web.config。
阿。对于app.config我正在使用OpenExeConfiguration:
// works fine for .exe.config
var config = ConfigurationManager.OpenExeConfiguration("some-assembly-here.exe");
config.AppSettings.Settings.Add("SomeSetting", "SomeValue");
config.Save();
这里我使用的OpenMappedMachineConfiguration
似乎是针对machine.config的,但是我看不到另一种打开任意web.config文件的方式 - 任何人?
答案 0 :(得分:10)
我的错误 - 打开web.config文件时我可以正常使用OpenMappedExeConfiguration
:
var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = configPath;
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);