2008-09-30 2 views
8

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

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

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

+0

У меня был тот же вопрос, но я действительно не нашел решения. Я буду следовать этой теме. – 2008-09-30 21:23:49

ответ

6

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

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

производства production.app.config тест теста .app.config

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

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

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

+2

Центральному репозиторию по-прежнему нужна локальная информация о конфигурации (например, ConnectionString или что-то, что требуется для доступа к ней). Кроме того, некоторая информация должна быть разделена между локальным и репозиторием (например, протоколирование, чтобы иметь возможность сообщать «ранние» ошибки). Конечно, конечно, но требует дополнительных мыслей. – 2008-10-01 05:49:19

+0

Я полагаю, что конфигурация сборки должна быть выполнена в visual studio - я нашел, что это нормально, но требует довольно много управления, так как очень легко случайно изменить конфигурацию сборки. Хороший ответ, хотя! – 2008-10-01 06:11:12

+0

Nick R - Я только делал это в Visual Studio, но не понимаю, почему MSBuild тоже не мог этого сделать. – marcj 2008-10-09 18:43:03

2

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

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

(The " exit 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> 

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

2

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

См. appSettings Element (General Settings Schema) в библиотеке MSDN.

0

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

1

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

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