Как я могу поделиться конфигурацией приложения в приложении .net? - PullRequest
8 голосов
/ 01 октября 2008

У меня относительно большая система .Net, которая состоит из множества различных приложений. Вместо того, чтобы иметь много разных файлов app.config, я хотел бы поделиться одним файлом конфигурации между всеми приложениями.

Я также хотел бы иметь одну версию для разработки на моей машине, одну версию для кого-то, кто разрабатывает на своей машине, одну версию для тестовой системы и одну версию для работающей системы.

Есть ли простой способ сделать это?

Ответы [ 5 ]

6 голосов
/ 01 октября 2008

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

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

производство продукции.app.config test test.app.config

Затем вы можете использовать событие предварительной сборки, чтобы скопировать правильную конфигурацию поверх стандартного app.config в вашем проекте. Затем он будет скопирован в ваш выходной каталог как обычно.

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

Вы можете объединить это с вышеприведенным, чтобы скопировать общие файлы конфигурации, специфичные для сборки, в каждый проект.

2 голосов
/ 01 октября 2008

Вместо добавления элементов <add> в раздел <appSettings> вашего конфигурационного файла вы можете добавить атрибут file= к элементу <appSettings>, чтобы сообщить ему о загрузке этих данных из другого файла. Затем вы можете сохранить ваши общие настройки в этом общем файле.

См. Элемент appSettings (схема общих настроек) в библиотеке MSDN.

2 голосов
/ 01 октября 2008

Вы можете использовать событие Post-build (Properties -> Build Events) в своих «дочерних» проектах, чтобы скопировать файл конфигурации из главного проекта в другие, например:

copy /Y c:\path\to\master\project\app.config $(TargetPath).config
exit 0

(«Выход 0» в качестве последней строки предотвращает ошибку сборки).

Чтобы иметь отдельные файлы конфигурации для разных целей сборки («RELEASE», «DEBUG» и т. Д.), Вы можете отредактировать файл .csproj (или .vbproj) в NOTEPAD.EXE, чтобы добавить тег AppConfig для каждой цели группы, как это:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <AppConfig>debug.app.config</AppConfig>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Devel\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <AppConfig>release.app.config</AppConfig>
  </PropertyGroup>

Обратите внимание на новые теги , присутствующие в каждой группе.

1 голос
/ 25 мая 2009

Можно использовать символьные ссылки NTFS , чтобы поделиться файлом .NET .config. Я видел, как это успешно используется в решении, включающем приложение ASP.NET, консольные приложения и т. Д.

0 голосов
/ 01 октября 2008

Вы также можете поместить параметры конфигурации в machine.config для совместного использования их несколькими приложениями. Это делает развертывание более проблематичным.

...