Как получить AppSettings из файла конфигурации сборки?

Я хотел бы получить ключ AppSetting из файла конфигурации сборки, который называется MyAssembly.dll.config. Здесь образец файла конфигурации:

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

Вот код для его получения:

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

Ответ 1

С помощью 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) могут полностью и очень успешно сосуществовать - не проблема вообще!

Марк

Ответ 2

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

то вы можете сделать это, как указано выше.

Ответ 3

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); 

Ответ 4

Вы также можете открыть его как XmlDocument и переместить документ с помощью Xpath. Тогда всегда LinqToXml

Ответ 5

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