2009-11-05 6 views
15

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

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

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

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

Возможный дубликат [Как я могу прочитать/напишите app.config настройки во время выполнения witho ut с использованием пользовательских настроек?] (https://stackoverflow.com/questions/3638754/how-can-i-read-write-app-config-settings-at-runtime-without-using-user-settings) – Matt

ответ

20

Используя 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 статического класс:

струнных серийный = ConfigurationManager.AppSettings [ "Последовательный"];

Это все еще работает. Конфигурация библиотеки классов скрывает только те параметры, которые находятся внутри его файла конфигурации; плюс вам нужно использовать экземпляр «libConfig», чтобы получить доступ к собственным настройкам конфигурации библиотеки классов.

Два мира (основной файл app.config, classlibrary.config) могут полностью и очень успешно сосуществовать - не проблема есть у всех!

Марк

+1

Что делать, если у меня нет узла appsettings в моем настраиваемом файле конфигурации? У меня есть узел. Итак, как получить узлы без использования AppSettingsSection? – Shesha

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

не очень - вы получите объект «Конфигурация» из вызова OpenMappedExeCOnfiguration, и если вы его используете, вы заглянете в свой сопоставленный конфигурационный файл, но если вы используете 'ConfigurationManager.AppSettings []', вы по-прежнему получаете основное приложение конфиги. –

0

Вы также можете открыть его как XmlDocument и навигации документа с Xpath. THEN всегда есть LinqToXml

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

, то вы можете сделать, как описано выше.

-1
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 
Смежные вопросы