Как получить 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
Другие вопросы по тегам