65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.86/5 (13投票s)

2004年12月2日

3分钟阅读

viewsIcon

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"))

生活变得更轻松了!

© . All rights reserved.