Подтвердить что ты не робот

Несколько файлов App.Config в проекте библиотеки классов .NET

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

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

App.Dev.Config

App.Test.Config

App.Prod.Config

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 3

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

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

введите описание изображения здесь

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

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 не может быть запрещена. Вы должны использовать альтернативные средства, как показано выше, для чтения данных из файлов конфигурации, отличных от настроек по умолчанию.