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

Можем ли мы поделиться содержимым App.config между проектами?

У меня есть два независимых проекта в моем решении Visual Studio 2008. Оба имеют свой собственный App.config. Но в одном проекте мне нужно одно или два свойства, определенные в другом проекте App.config. Возможно ли передать часть содержимого App.config из другого проекта?

4b9b3361

Ответ 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 добавлять существующие файлы из другого проекта в качестве ссылки:

alt text

Благодаря этому вы можете добавлять ссылки на файлы в ваш локальный проект, и они всегда будут обновляться. Отличное повышение производительности, если вам нужно сделать общий доступ на уровне файлов (например, для обычных файлов конфигурации или тому подобное)!

Ответ 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