我有一个我正在部署的ASP.NET Web应用程序,我正在尝试找出管理启动时应指向哪个环境的最佳方法,并确保我没有忽略任何环境选项。
首先是一点背景。
使用连续构建生成的工件,从构建服务器自动部署Web应用程序。部署包中包含每个可用环境的配置设置,因此最终会得到如下内容:
/Config/Environments/Development.xml
/Config/Environments/UAT.xml
/Config/Environments/Production.xml
问题是,当应用程序启动它应该加载哪个环境配置文件时,向应用程序指示的最佳方法是什么?
理想情况下,我希望能够在可能的情况下更改正在运行的应用程序的当前环境,但我现在很乐意跳过这个,因为如果需要,我可以随时进行重新部署。
我还想避免更改构建创建的任何工件,特别是因为Web部署包是一个zip文件,这样做意味着重建Web部署包。
我提出了以下选项:
使用目标计算机上的环境变量来提示要启动的环境,如果不存在,则默认为开发。这样做的主要缺点是我无法在指向不同环境的同一台机器上运行两个应用程序实例,并且因为我们通常将uat和staging环境部署到同一台机器上,这可能会成为一个问题。 / p>
远程编辑web.config,指出要启动的环境,我不知道该怎么做,但它可能是最好的选择(?)。
您可以使用Web部署执行某些操作,例如告诉它在运行时设置web.config值,但我不知道这是否可行(?)。
< / LI> 醇>我错过了一些明显的东西吗?任何帮助将不胜感激!
答案 0 :(得分:0)
如果要将多个实例部署到同一台计算机上,那么我认为文件路径可能会有所帮助?例如部署到文件夹中具有环境名称的文件路径:C:\ inetpub \ dev 这可能是最简单的方法。
如果选择选项1,我会使用注册表覆盖环境变量。
您也可以根据正在使用的构建服务器查看构建脚本中的目标环境。
答案 1 :(得分:0)
事实证明第三种选择实际上是可行的,我所做的是以下内容:
在Web应用程序项目的根目录中创建一个parameters.xml
文件,其中包含我要更改的参数:
<parameters>
<parameter name="Environment"
description="Please provide the environment name for the application."
defaultValue="Development"
tags="">
<parameterEntry
kind="XmlFile"
scope="\\web.config$"
match="/configuration/appSettings/add[@key='Environment']/@value" />
</parameter>
</parameters>
这将在创建部署包的同一位置创建SetParameters.xml
。
您可以在部署步骤运行时使用要部署的环境值更新SetParameters.xml
,例如在msbuild中,这将如下所示:
<XmlUpdate
XmlFileName="$(DeployFolder)\Project.SetParameters.xml"
Xpath="/parameters/setParameter[@name='Environment']/@value"
Value="$(Environment)" />
现在您可以运行deploy.cmd
并在远程计算机上部署时设置参数。