Несколько файлов App.Config в проекте библиотеки классов .NET - PullRequest
20 голосов
/ 15 декабря 2010

Я создаю один проект библиотеки классов.Теперь по умолчанию у меня есть один файл App.Config, так что я помещаю все специфические данные среды в этот файл конфигурации.

Теперь, основываясь на среде (будь то Dev / Test / Production), я планирую иметь триФайлы App.Config в VS 2010, такие как

App.Dev.Config

App.Test.Config

App.Prod.Config

Интересно, как приложение узнает, какой файл конфигурации использовать.

Кто-нибудь реализовал этот сценарий.Любые примеры кода / статьи будут полезны.

Спасибо

Ответы [ 3 ]

16 голосов
/ 15 декабря 2010

Приложение будет использовать файл конфигурации с именем YourExcecutable.exe.config, который по умолчанию является файлом App.config, включенным в ваш (исполняемый) проект.Обратите внимание, что .NET загружает только один файл конфигурации для всего приложения.Вы не можете использовать несколько файлов конфигурации (т. Е. По одному на проект библиотеки) без кодирования.

  1. Опция: Вы можете использовать события после сборки и разные конфигурации решения, чтобы скопировать тот или иной файл App.Config ввыходная папка

  2. Опция: Вы можете использовать класс ConfigurationManager для загрузки альтернативного файла конфигурации по коду.

8 голосов
/ 17 декабря 2012

Теперь есть еще лучшее решение: SlowCheetah - XML ​​Transforms

5 голосов
/ 30 августа 2016

Загрузка другого файла конфигурации приложения во время выполнения может быть выполнена с использованием сопоставленного файла конфигурации.Вам нужно добавить ссылку на System.Configuration.dll в вашем проекте.

Установите значение свойства Copy to Output Directory для всех дополнительных файлов конфигурации (например, App1.config, App2.config и т. Д.), Отличных от значения по умолчанию (App.config), равным Copy if newer.Таким образом, они будут доступны в выходном каталоге проекта (\ bin \ debug) после сборки проекта.Значение этого свойства по умолчанию: Do not copy.

enter image description here

Ниже приведен фрагмент кода о том, как считывать данные конфигурации из файлов конфигурации не по умолчанию:

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = "App1.config"; // app1.config should be present in root directory from where application exe is kicked off

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

 //get the relevant section from the config object
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");

//get key value pair
var keyValueConfigElement = section.Settings["appSettingsKey"];
var appSettingsValue = keyValueConfigElement.Value;

Если у вас есть несколько файлов конфигурации приложения, вы можете сохранить настройку по умолчанию в файле App.config, с помощью которого вы можете во время выполнения принять решение о том, какой дополнительный файл конфигурации загрузить, например, App1.config

Примечание : Учтите, что код, подобный ConfigurationManager.AppSettings["DeployEnv"], все равно будет считывать данные из файла App.config по умолчанию.Это поведение не может быть изменено.Загрузка файла по умолчанию App.config не может быть запрещена.Вы должны использовать альтернативные средства, как показано выше, для чтения данных из нестандартных файлов конфигурации

...