Я предлагаю использовать атрибут file
(соответствующий свойству AppSettingsSection.File ) вместо атрибута configSource
(соответствующего свойство SectionInformation.ConfigSource ) в разделе appSettings
.
configSource
не поддерживает другие ключи в разделе, в то время как appSettings
может содержать другие ключи, необходимые для Приложения и, возможно, где-то еще (кто-то может добавить / удалить их - для тестирования цели или любая другая причина).
Атрибут file
позволяет вместо этого присутствовать другой ключ в разделе appSettings
.
Ваш файл app.config
может быть:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings file="ShareAppSettings.debug.config">
<add key="DpiAwareness" value="PerMonitorV2"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1"/>
</startup>
</configuration>
Теперь значения доступны при открытии именованного раздела конфигурации:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
var kvpClientID = appSettings.Settings["clientID"];
var kvpClientSecret = appSettings.Settings["clientSecret"];
var kvpCenantID = appSettings.Settings["tenantID"];
string clientID = kvpClientID.Value;
и напрямую, используя ConfigurationManager.AppSettings - NameValueCollection - что возвращает значение указанного ключа:
string clientID = ConfigurationManager.AppSettings["clientID"];
string clientSecret = ConfigurationManager.AppSettings["clientSecret"];
string tenantID = ConfigurationManager.AppSettings["tenantID"];
В качестве примечания, используя атрибут file
, ваш ShareAppSettings.debug.config
не нуждается (но не запрещен) в заголовке XML, он может быть просто:
<appSettings>
<add key="clientID" value="11" />
<add key="clientSecret" value="11" />
<add key="tenantID" value="11" />
</appSettings>
Вторичное примечание:
Вы можете установить атрибут file
, чтобы он указывал на другой файл во время выполнения, и обновить sh значения appSettings
для обновления конфигурации.
Обратите внимание, что если атрибут file
уже был установлен, все значения, содержащиеся в этом файле .config
, не отклоняются , а вместо этого перемещаются в файл [Application].exe.config
, чтобы стать частью <appSettings>
раздел (таким образом, они сохраняются).
Еще одна причина, почему используется атрибут file
Ют может быть предпочтительнее.
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var appSettings = config.AppSettings;
appSettings.File = "SomeOtherFile.config";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");