Как я могу использовать несколько файлов конфигурации приложения в одном проекте?

После создания нового приложения Visual С# Console (.NET Framework 4.5) такой проект содержит файл App.config по умолчанию.

New Visual C# Console Application

После добавления ссылки для System.Configuration для проекта и использования ее в каком-то исходном файле using System.Configuration; я могу использовать статический класс ConfigurationManager для работы с файлом App.config. Но прежде, я хочу добавить некоторые параметры в файл, так что это примерно так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="DeployWeb" value="true" />
  </appSettings>
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

Теперь я могу написать что-то вроде этого, чтобы получить значение параметра:

Boolean deployWeb = false;
Boolean.TryParse(ConfigurationManager.AppSettings["DeployWeb"], out deployWeb);

Однако я не задал, какой файл конфигурации читать, но все в порядке, потому что есть значение по умолчанию. Но я могу добавить больше файлов конфигурации, щелкнув правой кнопкой мыши по проекту → Добавить → Новый элемент... → Файл конфигурации приложения, так что у меня есть, например, 5 файлов конфигурации, например, на картинке:

Several configuration files in a project

И ConfigurationManager по-прежнему будет читать по умолчанию, но я хочу вручную управлять, какой файл конфигурации использовать. Я хочу знать, если есть подходящий способ установить имя файла конфигурации ConfigurationManager для использования и т.д., И если это не плохая практика. Я знаю, как использовать разные конфигурации в режиме отладки/выпуска, но в моем случае у меня есть приложение, которое может быть запущено в разных режимах для разных целей в выпуске, например.

Вопрос. Возможно ли иметь несколько конфигурационных файлов в проекте и иметь возможность переключаться на тот, который я хочу использовать. Разве это не плохая практика, я должен использовать какой-то другой подход для своей цели? Использование событий построения не подходит в моем случае (я думаю).

PS. Прошу прощения за растяжку моего вопроса, однако мой вопрос довольно прост и может быть просто задан в двух предложениях, но в качестве правил говорит, вопрос должен содержать детали.

UPDATE: От уже существующего ответа "Опция: вы можете использовать класс ConfigurationManager для загрузки альтернативного файла конфигурации по коду." От чтения msdn Я не получил, какой из методов должен использовать. Должен ли я открыть конфигурацию Exe?

Ответ 1

Это можно сделать с помощью сопоставленного конфигурационного файла,

ExeConfigurationFileMap configFileMap = 
        new ExeConfigurationFileMap();
    configFileMap.ExeConfigFilename = "App4.config"; // full path to the config file

    // Get the mapped configuration file
   Configuration config = 
      ConfigurationManager.OpenMappedExeConfiguration( 
        configFileMap, ConfigurationUserLevel.None);

   //now on use config object

AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");