2010-12-15 4 views
17

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

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

App.Dev.Config 

App.Test.Config 

App.Prod.Config 

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

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

Благодаря

ответ

15

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

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

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

+7

+1: и просто для того, чтобы быть предельно ясным: файлы конфигурации, связанные с проектом сборки, НИКОГДА не будут использоваться. Будут использоваться только основные файлы конфигурации проекта. Вы должны контролировать их на этом уровне. – NotMe 2010-12-15 20:39:47

+0

@NotMe: Я знаю, что это немного более ясно из того, что вы имели в виду, но есть способы включить файлы конфигурации библиотеки. Дайте им уникальное имя, скопируйте их в выходной каталог и добавьте app.config вашего проекта запуска в качестве внешней ссылки. – Flater 2017-12-04 16:59:22

0

Here's an article об использовании XSLT для преобразования web.config для различных развертываний. И here's a second с другим подходом.

Очень жаль, что Microsoft выпустила Web.config Transform функцию без поддержки других .config файлов :(

4

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

Задайте значение Copy to Output Directory свойство всех дополнительных файлов конфигурации (например, App1.config, App2.config и т. д.) other tha n по умолчанию (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 не может быть запрещена. Вы должны использовать альтернативные средства, как показано выше, для чтения данных из файлов конфигурации, отличных от настроек по умолчанию.

Смежные вопросы