приложение.config: как сделать вложенный customSection, называемый appSettings, ConfigurationManager.Параметр appsettings
мое желаемое приложение.конфигурация будет такой:
<configSections>
<sectionGroup name="QA_Environment">
<section name="databases" type="System.Configuration.NameValueSectionHandler"/>
<section name="storageSystems" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
<sectionGroup name="Production_Environment">
<section name="databases" type="System.Configuration.NameValueSectionHandler"/>
<section name="storageSystems" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
</configSections>
...и затем у меня есть фактические группы и разделы прямо под этим. Но я был бы рад любым работам или лучшим предложениям. Теперь я опустил свои желания до этого:
<configSections>
<sectionGroup name="QA_Environment">
<section name="appSettings" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
<sectionGroup name="Production_Environment">
<section name="appSettings" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
</configSections>
и я думаю, что это нормально...Главное, что мне интересно, могу ли я заменить один из этих разделов как appSettings корневого уровня...без итерации через них и программного добавления или создания настройте и сохраните его. Я просто хочу, чтобы пользователь мог выбрать среду, событие select изменит appSettings...
одно ограничение, с которым я сталкиваюсь, заключается в том, что слой данных, на который я ссылаюсь, должен оставаться таким же, как он есть....поэтому мне в основном нужно получить мое приложение.конфигурация будет доступна точно так же, как в настоящее время из этих других проектов...то есть конфигурации.AppSettings[afdasdf]
Дайте мне знать, если это требует каких-либо разъяснений...спасибо
2 ответов
Я пойду вперед и отвечу на свой вопрос здесь, если это нормально. Я обнаружил, что делаю это намного сложнее, чем есть на самом деле. Все что вам нужно сделать это:
<?xml version="1.0" encoding="utf-8"?>
<configSections>
<sectionGroup name="Environment">
<sectionGroup name="QA">
<section name="databases" type="System.Configuration.DictionarySectionHandler"/>
<section name="storageSystems" type="System.Configuration.DictionarySectionHandler"/>
</sectionGroup>
<sectionGroup name="PROD">
<section name="databases" type="System.Configuration.DictionarySectionHandler"/>
<section name="storageSystems" type="System.Configuration.DictionarySectionHandler"/>
</sectionGroup>
</sectionGroup>
</configSections>
<Environment>
<QA>
<databases>
</databases>
<storageSystems>
</storageSystems>
</QA>
<PROD>
<databases>
</databases>
<storageSystems>
</storageSystems>
</PROD>
</Environment>
Итак, есть часть моего приложения.конфиг....остальное так же просто:
private void GetConfigurationSettings(TargetEnvironments targetEnvironment)
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var databases = new Hashtable();
var storageSystems = new Hashtable();
switch (targetEnvironment)
{
case TargetEnvironments.QA:
databases = (Hashtable)ConfigurationManager.GetSection("Environment/QA/databases");
storageSystems = (Hashtable)ConfigurationManager.GetSection("Environment/QA/storageSystems");
break;
case TargetEnvironments.PROD:
databases = (Hashtable)ConfigurationManager.GetSection("Environment/PROD/databases");
storageSystems = (Hashtable)ConfigurationManager.GetSection("Environment/PROD/storageSystems");
break;
}
foreach (string key in databases.Keys) { config.AppSettings.Settings.Add(key, databases[key].ToString()); }
foreach (string key in storageSystems.Keys) { config.AppSettings.Settings.Add(key, storageSystems[key].ToString()); }
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
UpdateCollections();
}
Примечание очевидно, важно использовать конфиг.Сохранить метод, чтобы сразу загрузить настройки, которые вы только что установили. Кроме этого, это действительно только имена путей и тип раздела, который Мне пришлось принять решение. Я нашел ссылку ниже, чтобы быть наиболее полезным. Если у кого-то есть более элегантный способ, мне было бы интересно услышать об этом.
вот место, где я получил максимальную отдачу от моих исследований
существует еще один способ справиться с веб-развертыванием.конфигурационный файл. Можно определить веб-сайт, специфичный для развертывания.конфигурационные файлы, описывающие команды редактирования в базовой сети.файл конфигурации (вместо того, чтобы повторять все). Взгляните на ответы для это так вопрос.
в принципе, вы можете определить веб.отлаживать.config и веб.освобождать.конфигурационный файл, который объединяется с базовой сетью.файл конфигурации при развертывании проектов.