Как получить AppSettings из файла конфигурации сборки?
Я хотел бы получить ключ AppSetting из файла конфигурации сборки с именем: MyAssembly.dll.config. Вот пример файла конфигурации:
<configuration>
<appSettings>
<add key="MyKey" value="MyVal"/>
</appSettings>
</configuration>
Вот код для его получения:
var myKey = ConfigurationManager.AppSettings["MyKey"];
5 ответов
С использованием OpenMappedExeConfiguration
возвращает объект "Конфигурация", который вы можете использовать, чтобы заглянуть в конфигурацию библиотеки классов (и существующие там настройки переопределяют настройки с тем же именем в конфигурации основного приложения):
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;
Но те настройки, которые являются уникальными для конфигурации основного приложения и не существуют в собственной конфигурации библиотеки классов, все еще доступны через ConfigurationManager
статический класс:
строка serial = ConfigurationManager.AppSettings["Serial"];
Это все еще работает - конфигурация библиотеки классов скрывает только те параметры, которые находятся внутри ее файла конфигурации; плюс вам нужно использоватьlibConfig
экземпляр, чтобы получить доступ к собственным настройкам библиотеки классов.
Два мира (основной app.config, classlibrary.config) могут полностью и очень счастливо сосуществовать - здесь вообще нет проблем!
Марк
var appSettings = ConfigurationManager.OpenExeConfiguration((Assembly.GetAssembly(typeof(MYASSEMBLY))).Location).AppSettings;
тогда вы можете сделать, как указано выше.
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);
Вы также можете открыть его как XmlDocument и перемещаться по документу с помощью Xpath. ТОГДА всегда есть LinqToXml
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