обновить web.config на другом сервере, используя asp.net - PullRequest
3 голосов
/ 04 декабря 2010

Я ищу простой и элегантный способ изменить мой appsettings в web.config на основе другой среды, и у меня есть (dev / qa / test / stage / prod), и я вручную изменяю appsettingsи это очень утомительно и требует много времени, и у меня есть около десятка настроек .... Каков наилучший подход для такой ситуации?Я знаю одно решение с использованием Environment variables, но хочу услышать лучшие практики?

Ответы [ 8 ]

2 голосов
/ 04 декабря 2010

Если возможно, обновите ваше приложение до asp.net 4.

Эта версия имеет функцию преобразования web.config, предназначенную для решения именно этой проблемы:

1 голос
/ 10 декабря 2010

Я предпочитаю использовать внешние разделы web.config, например:

<appSettings configSource="appsettings.config" />

тогда appsettings.config выглядит так:

<appSettings>
   <add key ...>
</appSettings>

Это позволяет мне сохранять настройки приложения в отдельном файле, который не изменяется, и в то же время позволяет редактировать основной файл web.conifig для фактических частей конфигурации. Вы можете сделать то же самое с другими разделами - строки подключения, system.net (для настройки электронной почты) и т. Д.

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

1 голос
/ 10 декабря 2010

До VS2010 мы фактически назвали наши web.prod.config, web.qa.config и т. Д. Я полагаю, у нас был какой-то отличный прогноз

В любом случае, в VS2008 у нас была команда копирования, которая выполнялась как часть шага сборки, которая копировала соответствующий файл конфигурации на основе конфигурации, которую мы создавали. Наш обычный web.config указывал на dev, и мы использовали TFS для развертывания в других средах.

1 голос
/ 10 декабря 2010

В конечном счете, я рекомендую по возможности использовать функцию преобразования Web.config в Visual Studio 2010.

Если VS2010 не вариант или вы не хотите использовать функцию преобразования конфигурации, взгляните на это решение, которое я придумал некоторое время назад. Он использует комбинацию командного файла и сценария NANT для создания файлов конфигурации из одного шаблона и одного или нескольких файлов замещения. Он не такой мощный, как инструмент преобразования Web.config, но довольно эффективная альтернатива.

http://blog.nathan -taylor.net / 2009/10 / WebConfig-билд-manager.html

1 голос
/ 10 декабря 2010

Если вы используете VS2010 (NET tools version 4), то вы можете выполнять преобразования веб-конфигурации и создавать пакет развертывания для развертывания в стадии подготовки, производства и т. Д. Не имеет значения, какая ваша целевая версия asp.net.Затем разверните пакет, и у вас будет целевой файл конфигурации, установленный на вашей цели.Нет необходимости во времени выполнения, чтобы понять это.Я делаю это все время, используя 3.5 в качестве целевой версии .NET, используя MSBuild 4, которую использует VS2010.В моей среде разработки параметры приложения отличаются от моих производственных и промежуточных сред.

1 голос
/ 04 декабря 2010

Обычно я делаю следующее:

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

Требуется небольшая начальная настройка, но после настройки он обеспечивает простой и удобный способ получения значений конфигурации.

0 голосов
/ 23 января 2011

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

Например, у меня есть appsettings.config.debug, appsettings.config.deploy, web.config.debug, web.config.deploy.

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

Мой код командной строки события перед сборкой:

"$(ProjectDir)copyifnewer.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config"

и

"$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appsettings.config.$(ConfigurationName)" "$(ProjectDir)appsettings.config"

И мойФайл copyifnewer.bat:

echo Config Maintenance
echo Today's date of %date:~-4,4%\%date:~-10,2%\%date:~-7,2%
rem echo Comparing two files: %1 with %2
echo .
if not exist %1 goto File1NotFound
if not exist %2 goto File2NotFound

fc %1 %2 
if %ERRORLEVEL%==0 GOTO NoCopy

echo These files are NOT the same.  Copying %1 over %2
copy %1 %2 /y & goto END

:NoCopy
echo These files are the same.  Nothing copied.
goto END

:File1NotFound
echo %1 not found.
goto END

:File2NotFound
copy %1 %2 /y
goto END

:END
echo Done.
echo .

Это прекрасно работает для меня.Надеюсь, это кому-нибудь поможет.

Спасибо, Скотт

0 голосов
/ 02 января 2011

Мы используем Nant для создания сценариев наших сборок и развертываний.

Nant скопирует шаблоны web.config и app.config в те места, где их ожидают файлы проекта. В то же время Nant заменяет токены соответствующими значениями для среды QA.

...