Как мне обработать несколько преобразований web.config для разных экземпляров при работе с несколькими целями публикации? - PullRequest
4 голосов
/ 30 сентября 2011

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

Проблема с этим возникласегодня, когда я пошел, чтобы опубликовать обновление на одном из сайтов.Я забыл изменить конфигурацию сборки, поэтому моя публикация на сайте A использовала преобразование web.config, предназначенное для сайта B, и последовал хаос и путаница.

Есть ли способ указать, что конкретныйЦель публикации будет использоваться ТОЛЬКО с определенной конфигурацией сборки?

Или есть лучший способ справиться с этой ситуацией, чем манипулирование конфигурациями сборки?

Ответы [ 3 ]

3 голосов
/ 05 октября 2011

Один из способов справиться с подобными вещами, и я не уверен, что это лучше, но это способ - установить определенные значения конфигурации в файле web.config более высокого уровня или файле machine.config, который всегда находитсяна рассматриваемой машине.

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

Вот некоторые соображения, если вы сделаете это.

  1. Если вы хотите контролировать эти значения в источнике, это может быть более сложным способом (это может быть за или против в зависимости от вашей среды).
  2. Если другие виртуальные сайты находятся на той же машине и используютодинаковые значения конфигурации, это может повлиять на их все, и если несколько сайтов используют одно и то же значение конфигурации, изменение его в источнике изменит их все (опять же, это может быть как за, так и против).
  3. Если что-то не так со значением, может быть сложнее определить, где проблема или что ее вызывает.
  4. Возможно, dв вашей организации или с вашим хостинг-провайдером, в зависимости от ваших прав доступа / безопасности, и не всегда возможно поставить web.config на более высокий уровень, чем ваше приложение.

Очевидно, что здесь хорошов том, что вы можете настроить разные значения на каждом компьютере, и если эти значения также не заданы в вашем файле web.config (что может привести к ошибке), вам не придется беспокоиться о компиляции разных версий.

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

Вы можете попытаться настроить непрерывную интеграцию с чем-то вроде TFS Build, если это доступно для вас, и в этом случае то, что собирается для prod, может быть настроено так, чтобы оно всегда работало определенным образом и всегда вытягивало из правильноготип сборки.

Надеюсь, что-то здесь поможет.

1 голос
/ 06 октября 2011

Возможно, вы могли бы найти решение, в котором вы не полагаетесь на диалоговое окно «Публикация» веб-приложения, которое требует, чтобы вы каждый раз устанавливали правильные настройки, а вместо этого использовали автоматическое командное окно, подобное решению (командный файл ваша собственная цель для msbuild или сервер сборки, подобный предложенному CStroliaDavis [cruisecontrol, tfs, teamcity]).

Вы можете просто вызвать цель 'package' из командной строки, которая создает пакет:

msbuild MyWebProject.csproj /t:Package /P:Configuration=Release;DeployIisAppPath="Default Web Site/Main/MyWebProject";PackageLocation="F:\MyWebProjectDeploy.zip"

Это также создает файл * .cmd, чтобы вы могли развернуть его следующим образом:

F:\MyWebProjectDeploy.deploy.cmd /Y -allowUntrusted /M:http://webserver/MSDeployAgentService /U:Administrator /P:"Secret"

Вы можете добавить собственный файл * .msbuild в свое решение, которое выполняет эти действия, или, возможно, проще всего добавить команду в Инструменты -> Внешние инструменты.

1 голос
/ 01 октября 2011

С kwateeSDCM вы можете не только развертывать приложения и веб-приложения, но и управлять параметрами от экземпляра к экземпляру или переопределением файлов.Я использовал его только в войнах Tomcat, но он не привязан к языку или платформе, поэтому я полагаю, что настроить его для работы с ASP.NET должно быть просто.

...