У меня есть два независимых проекта в моем решении Visual Studio 2008. Оба имеют свой собственный App.config. Но в одном проекте мне нужно одно или два свойства, определенные в другом проекте App.config. Возможно ли передать часть содержимого App.config из другого проекта?
Можем ли мы поделиться содержимым App.config между проектами?
Ответ 1
Да, конечно. Любой раздел конфигурации может быть "внешним", например:
<appSettings configSource="AppSettings.DEV.config" />
<connectionStrings configSource="MyConnection.config" />
или же
<system.net>
<mailSettings>
<smtp configSource="smtp.TEST.config" />
против
<system.net>
<mailSettings>
<smtp configSource="smtp.PROD.config" />
Любой раздел конфигурации может быть помещен в отдельный файл, который может быть разделен между проектами, но без групп разделов конфигурации, и, к сожалению, иногда сложно узнать, что есть что.
Кроме того, в некоторых случаях Visual Studio будет жаловаться (используя красные волнистые подчеркивания) на то, что "configSource" предположительно недействителен, но он определен для объекта ConfigurationSection
в системе конфигурации .NET.
ОБНОВИТЬ:
Еще одна особенность, которую разработчики, похоже, знают и используют, - это возможность в Visual Studio добавлять существующие файлы из другого проекта в качестве ссылки:
Благодаря этому вы можете добавлять ссылки на файлы в ваш локальный проект, и они всегда будут обновляться. Отличное повышение производительности, если вам нужно сделать общий доступ на уровне файлов (например, для обычных файлов конфигурации или тому подобное)!
Ответ 2
Попробуйте следующее:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings file="PROD.config">
<add key="common.Currency" value="GBP" />
</appSettings>
</configuration>
Ответ 3
Используется только "запущенный" app.config, но вы можете использовать внешний вид, как говорит marc_s.
Вы также можете создать файл .Settings, который "shared". Перейдите в "общие" свойства проекта, вкладку "Параметры" слева, создайте параметр с областью приложения и установите для параметра "Модификатор доступа" сверху значение "Общий". В другом проекте вы можете использовать ClassLibrary1.Properties.Settings.Default.SettingName для доступа к нему. Он будет строго типизирован, но вам может понадобиться его во время компиляции.
Ответ 4
Что-то, что мне нравится делать, особенно при попытке скопировать элементы ServiceModel между библиотеками и тестами - использовать configSource для фрагмента конфигурации в целевой библиотеке и просто link
/copy always
фрагменты в моих тестовых проектах.
Таким образом, я поддерживаю только в одном месте.
Вы можете сделать это на один шаг дальше и просто иметь общий каталог в решении и связывать фрагменты во всех проектах.
Ответ 5
В этой ситуации я бы подумал, что использование базы данных для хранения некоторых данных конфигурации было бы идеальным. Каждое приложение делает свое дело, но они обращаются к общей базе данных, чтобы получить эти общие части информации.
РЕДАКТИРОВАТЬ: Я говорил слишком скоро! Похоже, что и OP, и я кое-что узнали о файлах конфигурации = D