"零 Web.config 配置" 部署 / "免改 Web.config" 应用部署






2.86/5 (13投票s)
2004年12月2日
3分钟阅读

60191
部署时无需修改 web.config。
引言
Web 应用的 "零 web.config 配置" 或 "免改 web.config" 部署。
我们都知道,当我们将应用程序从一个环境移动到另一个环境(即从开发到测试,从测试到验证等等)时,我们必须更改 web.config 文件以使用与该服务器相关的正确设置。一个很好的例子是连接字符串。每个服务器的连接字符串都不同(开发、测试、验证、生产)。
有一种很好的方法可以做到这一点,如果实施了这种方法,您在从一个服务器移动到另一个服务器时,无需更改 web.config 中的任何内容,它会根据您的应用程序运行的服务器自动选择适当的键值。(请注意,本文的目的是向您介绍一个概念,并不遵守代码命名约定等。您可以改进代码和变量名声明等。)
使用代码
警告: 请记住,XML 文件区分大小写,如果您在创建正确的标记时犯了错误,您的 ASP.NET 应用程序将无法运行,因此您需要非常小心。我建议在修改 Machine.config 文件之前对其进行备份,如果出现问题,请将其替换为备份文件。
要实现 Web 应用程序的 "免改 web.config" 部署,需要三个步骤。
步骤 1
您将在服务器/计算机的 Machine.config 文件中创建一个键,以将该服务器标识为特定环境(即开发、测试、验证、生产)。搜索 Machine.config 文件中的 "appSettings"。这个键已经存在但被注释掉了,按照图中的方式修改它,并标识您的服务器(这里我将其标识为开发服务器,根据服务器的类型或贵公司使用的命名约定来命名)。
<appsettings>
<add key="Environment" value="Development" />
<appsettings>
第二步
接下来,在您的应用程序的 web.config 中创建以下键,如此处所示。(请注意,您也可以将以下设置移动到 Machine.config,但为了简单起见,我将它们包含在 web.config 中。一旦您熟悉了这个概念,您也可以将其移动到 Machine.config,这样开发人员需要做的事情就很少了,而且如果任何设置发生变化,您只需要在一个地方进行更改)。您可以根据需要自定义名称和值。
<configSections>
<section name="Development"
type="System.Configuration.SingleTagSectionHandler,system,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="Testing"
type="System.Configuration.SingleTagSectionHandler,system,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="Production"
type="System.Configuration.SingleTagSectionHandler,system,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<Development
ConnectionString="DevelopmentConnectionString"
ErrorString="DevelopmentErrorConnectionString"
setting3="third value" />
<Testing
ConnectionString="TestConnectionString"
ErrorString="TestErrorConnectionString"
setting3="third value" />
<Production
ConnectionString="ProductionConnectionString"
ErrorString="ProductionErrorConnectionString"
setting3="third value" />
注意:如果您想使用不同的设置,而不管 Machine.config 文件中设置了什么,您可以在 web.config 文件中使用不同的值创建相同的键。
<appsettings>
<add key="Environment" value="Development"/>
<appsettings>
这是可行的,因为当您访问该键时,ASP.NET 将首先搜索 Web.config 中是否存在该键。如果找到,它将返回值,如果找不到,它将搜索 Machine.config 文件并返回值(如果找到该键),否则不返回任何内容。
步骤 3
现在我们想在我们的应用程序中读取这些值,为此我创建了一个小函数,您可以将键的名称传递给它,它将返回该键的值,该函数还接受可选参数名“Environment”,如果传递该参数,将返回与指定环境相关的键。
Public Function GetKeyValue(ByVal _Key As String, _
Optional ByVal _Environment As String = "")
Dim Env As String
If Trim(_Environment) <> "" Then
Env = _Environment
Else
Env = ConfigurationSettings.AppSettings("Environment")
End If
Dim config1 As System.Collections.IDictionary = _
ConfigurationSettings.GetConfig(Env)
Return config1(_Key)
End Function
接下来是如何读取值
要检索键的值,您可以像这样调用该函数
Response.Write(GetKeyValue("ConnectionString"))
上述语句将根据应用程序运行的环境返回适当的连接字符串。如果在开发环境中运行,它将返回开发连接字符串,如果在测试服务器上运行,它将返回与测试服务器相关的连接字符串。
此外,如果需要,您可以指定您需要与特定环境或服务器相关的连接字符串,您可以按照以下方式进行操作。
Response.Write(GetKeyValue("ErrorString", "Testing"))
生活变得更轻松了!