Как условно развернуть app.config на основе конфигурации сборки?

18
задан Anthony Mastrean 28 July 2011 в 14:22
поделиться

5 ответов

Что-то вроде

<PropertyGroup Condition="'$(Configuration)'=='Dev_Debug' OR '$(Configuration)'=='Dev_Release'" >
    <CfgFileName>Dev</CfgFileName>
</PropertyGroup>
<!-- similar for Qs & Prd -->
<Target ...>...$(CfgFileName).config...
6
ответ дан 30 November 2019 в 09:11
поделиться

Мы зафиксировали это использование Выбрать элемент в 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>

9
ответ дан 30 November 2019 в 09:11
поделиться

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

{Dev_Debug.config, Dev_Release.config, Qs_Debug.config, ..., Prd_Release.config}.

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

0
ответ дан 30 November 2019 в 09:11
поделиться

Я предполагаю, что Ваш вопрос показывает, что Вы переросли app.config - пора идти дальше к лучшему решению и начать решать некоторые связанные проблемы.

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

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

опция состоит в том, чтобы встроить несколько конфигураций в сингл app.config, который разумен для маленьких, относительно неважных приложений или на ранних стадиях разработки/выпуска. Например, создайте параметр конфигурации, названный чем-то как target-env, который содержит значение, которое Вы используете в своем коде для выбора других параметров конфигурации, такой как путем предварительного ожидания значения на ключи других параметров конфигурации.

Мое предпочтение состоит в том, чтобы переместиться прошлый app.config в целом, или использовать его минимально. В этом случае я предпочитаю помещать как раз достаточно данных конфигурации в файл, чтобы позволить моему приложению/системе соединяться со своей базой (базами) данных, затем я поместил остающиеся детали конфигурации в специальную таблицу базы данных с этой целью. Это имеет много преимуществ, таких как информирование базы данных того, какую среду это представляет (dev, тест, производство, и т.д.) и держание вместе конфигурации и других данных. Пакет развертывания может затем правильно быть сохранен немым относительно конфигураций и различий в среде - код просто получает доступ к своим данным конфигурации и действует соответственно, таким образом, тот же пакет развертывания хорош для любой среды.

Однако ключевой фактор достижения успеха к этому подходу - то, что Ваш код приложения должен "знать" то, что он ожидает для конфигурации, и он должен "знать" для отклонения неподходящей/неполной конфигурации. Это - то, где необходимо провести время, не пытаясь работать вокруг пределов app.config.

, Который обычно означает создавать Ваш собственный класс для доступа к данным конфигурации, затем с помощью того класса всюду по приложению вместо этого. Это также приводит ко многим другим преимуществам, таким как данные конфигурации со строгим контролем типов: вместо String, возвратитесь DateTime, или Url, или Integer, или Currency, или безотносительно лучших соответствий данные конфигурации и приложение.

1
ответ дан 30 November 2019 в 09:11
поделиться

Как насчет использования сервера сборки?
Прошло много времени с тех пор, как я работал в .NET, но разве вы не можете использовать Hudson (-подобный) сервер для управления конфигурациями сборки? Разве не проще?
А как насчет NAnt? Вам это не подходит?

1
ответ дан 30 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: