Что-то вроде
<PropertyGroup Condition="'$(Configuration)'=='Dev_Debug' OR '$(Configuration)'=='Dev_Release'" >
<CfgFileName>Dev</CfgFileName>
</PropertyGroup>
<!-- similar for Qs & Prd -->
<Target ...>...$(CfgFileName).config...
Мы зафиксировали это использование Выбрать элемент в csproj файле. У нас есть несколько различных конфигураций, настроенных так все, что мы делаем, бросают этот блок в Ваш proj файл, и можно использовать Конфигурацию VS для выручения Вас. Я действительно хочу к совету второго Rob переместиться, передал app.config. Я перемещался в то направление в течение некоторого времени.
<Choose>
<When Condition=" '$(Configuration)' == 'Debug' ">
<ItemGroup>
<None Include="App.config" />
<None Include="Release\App.config" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<None Include="Release\App.config">
<Link>App.config</Link>
</None>
</ItemGroup>
</Otherwise>
Последнее решение, которое я хотел бы использовать, состоит в том, чтобы создать 6 конфигураций приложения, 1 на пользовательскую конфигурацию
{Dev_Debug.config
, Dev_Release.config
, Qs_Debug.config
, ...
, Prd_Release.config
}.
, Хотя с той установкой я мог поддержать универсальный сценарий сборки, не используя условных строк.
Я предполагаю, что Ваш вопрос показывает, что Вы переросли app.config
- пора идти дальше к лучшему решению и начать решать некоторые связанные проблемы.
Для одного, Вы никогда не должны автоматически развертывать конфигурационный файл на производстве, и необходимо ожидать, что операционный персонал поддержки сильно отклонит любую попытку сделать так. Конечно, если Вы - операционный персонал поддержки, затем необходимо отклонить его сами. Вместо этого Ваш выпуск должен включать некоторые инструкции для того, чтобы вручную обновить конфигурационный файл с образцом для иллюстрации. Производственная конфигурация слишком важна для меньших мер, если Вы просто не оцениваете свою производственную систему очень.
Аналогично для теста и других сред, но до меньшего градуса, таким образом, Вам действительно только нужен Ваш app.config
заполненный для Вашей собственной технической разработки.
опция состоит в том, чтобы встроить несколько конфигураций в сингл app.config
, который разумен для маленьких, относительно неважных приложений или на ранних стадиях разработки/выпуска. Например, создайте параметр конфигурации, названный чем-то как target-env
, который содержит значение, которое Вы используете в своем коде для выбора других параметров конфигурации, такой как путем предварительного ожидания значения на ключи других параметров конфигурации.
Мое предпочтение состоит в том, чтобы переместиться прошлый app.config
в целом, или использовать его минимально. В этом случае я предпочитаю помещать как раз достаточно данных конфигурации в файл, чтобы позволить моему приложению/системе соединяться со своей базой (базами) данных, затем я поместил остающиеся детали конфигурации в специальную таблицу базы данных с этой целью. Это имеет много преимуществ, таких как информирование базы данных того, какую среду это представляет (dev, тест, производство, и т.д.) и держание вместе конфигурации и других данных. Пакет развертывания может затем правильно быть сохранен немым относительно конфигураций и различий в среде - код просто получает доступ к своим данным конфигурации и действует соответственно, таким образом, тот же пакет развертывания хорош для любой среды.
Однако ключевой фактор достижения успеха к этому подходу - то, что Ваш код приложения должен "знать" то, что он ожидает для конфигурации, и он должен "знать" для отклонения неподходящей/неполной конфигурации. Это - то, где необходимо провести время, не пытаясь работать вокруг пределов app.config
.
, Который обычно означает создавать Ваш собственный класс для доступа к данным конфигурации, затем с помощью того класса всюду по приложению вместо этого. Это также приводит ко многим другим преимуществам, таким как данные конфигурации со строгим контролем типов: вместо String
, возвратитесь DateTime
, или Url
, или Integer
, или Currency
, или безотносительно лучших соответствий данные конфигурации и приложение.
Как насчет использования сервера сборки?
Прошло много времени с тех пор, как я работал в .NET, но разве вы не можете использовать Hudson (-подобный) сервер для управления конфигурациями сборки? Разве не проще?
А как насчет NAnt? Вам это не подходит?