Как получить 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