C# - переопределить конфигурацию вручную - PullRequest
1 голос
/ 12 февраля 2020

Я использую C#. net

Мне нужно загрузить внешний файл конфигурации (web.config) и переопределить значения всех разделов и всех элементов (каждого раздела) в текущей конфигурации .

т.е. после переопределения состояние должно быть следующим:

ConfigurationManager.AppSettings = ... настройки приложения из web.config читаются ...

и т. Д. Для всех разделов.

В коде что-то вроде (или более простой код, если есть).

string s = "c:\test\web.config";

Configuration config = ConfigurationManager.OpenExeConfiguration(s);
foreach(ConfigurationSection section in config.sections) {
  // **** What to do here in order to do: ConfigurationManager.Override(section)
  // so, I can use, i.e, line code such as : string s = ConfigurationManager.AppSettings["key"] ?
}

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Я нашел решение и хочу принять в нем участие.

Вот код:

// For the file name:
string s = "c:\test\web.config";

// Now creating configuration:
Configuration roamingConfig =
    ConfigurationManager.OpenExeConfiguration(s);

// configure the map
ExeConfigurationFileMap configFileMap =
    new ExeConfigurationFileMap();

configFileMap.ExeConfigFileName = s;

// Now add new configuration, based on the configuration file map.
Configuration configFile = 
    ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);

var allKeys = configFile.AppSettings.Settings.AllKeys;
foreach (var key in allKeys) {
  ConfigurationManager.AppSettings["key"] = 
     configFile.AppSettings.Settings[key].value;
}

configFile.SaveAs(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection("appSettings");

Вкратце я объявил конфигурацию дважды (второй: откройте с конфигурацией map exe), сохраните файл по собственному пути выполнения и обновите sh раздел конфигурации appSettings.

1 голос
/ 12 февраля 2020

Одним из подходов может быть первая перезапись файла конфигурации приложения с использованием функции SaveAs. А затем обновите sh все разделы конфигурации, используя функцию ConfigurationManager.RefreshSection.

Вариант 1: с помощью RefreshSection

string s = "c:\test\web.config";

var configFile = ConfigurationManager.OpenExeConfiguration(s);

//Overwrite config file of app
configFile.SaveAs(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

//Iterate through each sections 
foreach(ConfigurationSection section in configFile.Sections)
{
    //Refresh each section
    ConfigurationManager.RefreshSection(section.SectionInformation.Name);
}

[РЕДАКТИРОВАТЬ]

Вариант 2: Добавить пример для обновления key-value пара секции AppSettings со значением, считанным из конфигурации в другом месте.

string s = "c:\test\web.config";
var configFile = ConfigurationManager.OpenExeConfiguration(s);
//Get all keys
var allKeys = configFile.AppSettings.Settings.AllKeys;
foreach (var key in allKeys)
{
    // Set value in ConfigurationManager
    ConfigurationManager.AppSettings["Name"] = 
                               configFile.AppSettings.Settings[key].Value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...