在处理多个发布目标时,如何处理不同实例的多个web.config转换?

时间:2011-09-30 12:28:53

标签: visual-studio visual-studio-2010 deployment web-config

我有一个Asp.NET MVC网站,我管理多个实例。每个实例都使用它自己的数据库,但代码库完全相同。为了方便这一点,我有几个带有匹配的web.config转换的构建配置,因此当我发布它时,它不使用我的开发数据库,​​而是使用该站点实例的特定数据库。

当我去其中一个网站发布更新时,问题出现了。我忘了更改构建配置,因此我发布到站点A的是使用了针对站点B的web.config转换,随之而来的是混乱和混乱。

有没有办法指定特定的发布目标只能与特定的构建配置一起使用?

或者有没有比处理构建配置更好的方法来处理这种情况?

3 个答案:

答案 0 :(得分:3)

处理这类事情的一种方法,我不确定它是最好的,但它是一种方法,是在更高级别的web.config或machine.config文件中设置某些配置值在有问题的机器上。

然后确保您的项目文件不会覆盖这些配置值。

如果你这样做,可以考虑以下几点。

  1. 如果您想控制这些值,可能会更困难 这样(这可能是一个专业或一个骗局,取决于你的 环境)。
  2. 如果其他虚拟站点位于同一台计算机上并使用相同的站点 配置值,这可能会影响它们,如果是多个 站点确实使用相同的配置值,在更改时使用相同的配置值 来源将改变它们(再次,可能是一个专业或一个骗局 视)。
  3. 如果值有问题,可能会更难 确定问题所在或导致问题的原因。
  4. 在您的组织中进入machine.config可能很困难 或根据您的访问/安全性与您的托管服务提供商 特权,并不总是可以将web.config放在一个 比你的应用程序更高级别。
  5. 显然,这里的好处是你可以在每台机器上配置不同的值,只要这些值没有在web.config中设置(这可能会导致错误),你就不会有担心编译不同的版本。

    我相信Visual Studio 2010有一种方法可以为不同的构建类型设置不同的配置文件,但这听起来很像你已经在做的事情,所以忘记构建正确的方法仍然会得到类似的结果。

    如果您可以使用TFS Build之类的东西,您可以尝试设置持续集成,在这种情况下,为prod构建的内容可以设置为始终以某种方式工作并始终从正确的构建类型中提取。

    希望这里有所帮助。

答案 1 :(得分:1)

使用kwateeSDCM,您不仅可以部署应用程序和Web应用程序,还可以管理逐个实例的参数或文件覆盖。我只使用它与tomcat战争,但它没有绑定到语言或平台,所以我认为配置它也可以直接使用ASP.NET。

答案 2 :(得分:1)

也许您可以找到一个解决方案,您不必依赖Web应用程序的“发布”对话框,该对话框要求您每次都进行正确的设置,而是使用类似解决方案的自动命令行(批处理文件,你自己的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文件添加到执行这些操作的解决方案中,或者最简单的方法是将命令添加到工具 - >外部工具。