在开发和生产环境中使用不同的Web.config

问题描述 投票:189回答:10

我需要在ASP.NET应用程序中使用不同的数据库连接字符串和SMTP服务器地址,这取决于它是在开发环境还是生产环境中运行的。

应用程序通过WebConfigurationManager.AppSettings属性从Web.config文件读取设置。

我使用Build / Publish命令通过FTP将应用程序部署到生产服务器,然后用正确的手动替换远程Web.config。

是否有可能以某种方式简化部署过程?谢谢!

asp.net visual-studio configuration web-config
10个回答
155
投票

在Visual Studio 2010及更高版本中,您现在可以根据构建配置将转换应用于web.config。

创建web.config时,您可以在解决方案资源管理器中展开该文件,您将看到两个文件:

  • Web.Debug.Config
  • Web.Release.Config

它们包含可用于的转换代码

  • 更改连接字符串
  • 删除调试跟踪和设置
  • 注册错误页面

有关更多信息,请参见MSDN上的Web.config Transformation Syntax for Web Application Project Deployment。>>

尽管官方上不支持,也可以将相同类型的转换应用于非Web应用程序app.config文件。有关如何修改项目文件以向msbuild添加新任务的信息,请参见Phil Bolduc blog

这是经久耐用的request on the Visual Studio Uservoice

extension for Visual Studio 2010及以上,“ SlowCheetah”可用于为任何配置文件创建转换。从Visual Studio 2017.3开始,SlowCheetah has been integrated into the IDE和代码库由Microsoft管理。此新版本还支持JSON转换。

web.config中的<appSettings>标记支持文件属性,该属性将使用其自己的一组键/值加载外部配置。这些将覆盖您在web.config中拥有的任何设置,或将其添加到其中。

我们通过在安装时使用与网站安装环境相匹配的文件属性修改web.config来利用这一点。我们通过在安装程序上进行切换来实现。

例如;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">

<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

注意:

  • 由属性指定的.config的更改不会触发asp.net worker进程的重启

如果您不在2008年,也有VS2005的版本。

我也想知道。这有助于为我查出问题]

然后,我保留一个connectionStrings.config和一个“ {host} connectionStrings.config”。这仍然是一个问题,但是如果您针对两个环境中不同的部分执行此操作,则可以部署和版本化相同的web.config。

(而且我不使用VS,顺便说一句。]

我使用NAnt构建脚本来部署到我的不同环境。我让它根据要部署到的位置通过XPath修改我的配置文件,然后使用Beyond Compare自动将其放入该环境。

需要一两分钟进行设置,但您只需执行一次。然后批处理文件接管,而我要去喝杯咖啡。 :)

Here's我在上面找到了一篇文章。

在一个拥有4个环境(开发,测试,分段和生产)的项目中,我们开发了一个系统,其中应用程序根据部署到的计算机名称选择适当的配置。

这对我们有用,因为:

  • 管理员可以在不涉及开发人员的情况下部署应用程序(一项要求),而不必摆弄配置文件(他们讨厌);
  • 机器名称遵守约定。我们使用正则表达式匹配名称,并将其部署到环境中的多台计算机上;和
  • 我们对连接字符串使用了集成安全性。这意味着我们可以在设计时将帐户名保留在配置文件中,而无需透露任何密码。
  • 在这种情况下,它对我们来说效果很好,但可能并非在所有地方都可以。

    企业库配置编辑器可以帮助您完成此操作。它允许您创建一个基本配置文件,然后为每个环境创建增量。然后,您可以合并基本配置和增量以创建特定于环境的web.config。查看信息here,它比我能更好地帮助您理解它。

    您也可以将其设为构建后步骤。设置除调试和发行版外的新配置“ Deploy”,然后将构建后步骤复制到正确的web.config上。

    我们对所有项目都使用自动构建,并使用这些构建脚本来更新web.config文件以指向正确的位置。但是,如果您从VS做所有事情,那将无济于事。

    这是使用machine.config的巨大好处之一。在我的上一份工作中,我们拥有开发,测试和生产环境。我们可以将machine.config用于连接字符串之类的东西(连接到适当的dev / test / prod SQL计算机)。

    如果您无权访问实际的生产机器(例如,如果您在共享主机上使用托管公司,则这可能不是您的解决方案。

    您还可以使用扩展名“ Configuration Transform”与“ SlowCheetah”相同,


    0
    投票

    您还可以使用扩展名“ Configuration Transform”与“ SlowCheetah”相同,


    80
    投票

    web.config中的<appSettings>标记支持文件属性,该属性将使用其自己的一组键/值加载外部配置。这些将覆盖您在web.config中拥有的任何设置,或将其添加到其中。


    24
    投票

    您是否参加过Web部署项目?


    12
    投票

    我也想知道。这有助于为我查出问题]


    6
    投票

    我使用NAnt构建脚本来部署到我的不同环境。我让它根据要部署到的位置通过XPath修改我的配置文件,然后使用Beyond Compare自动将其放入该环境。

    需要一两分钟进行设置,但您只需执行一次。然后批处理文件接管,而我要去喝杯咖啡。 :)


    5
    投票

    在一个拥有4个环境(开发,测试,分段和生产)的项目中,我们开发了一个系统,其中应用程序根据部署到的计算机名称选择适当的配置。

    这对我们有用,因为:


    3
    投票

    企业库配置编辑器可以帮助您完成此操作。它允许您创建一个基本配置文件,然后为每个环境创建增量。然后,您可以合并基本配置和增量以创建特定于环境的web.config。查看信息here,它比我能更好地帮助您理解它。


    3
    投票

    您也可以将其设为构建后步骤。设置除调试和发行版外的新配置“ Deploy”,然后将构建后步骤复制到正确的web.config上。

    我们对所有项目都使用自动构建,并使用这些构建脚本来更新web.config文件以指向正确的位置。但是,如果您从VS做所有事情,那将无济于事。


    3
    投票

    这是使用machine.config的巨大好处之一。在我的上一份工作中,我们拥有开发,测试和生产环境。我们可以将machine.config用于连接字符串之类的东西(连接到适当的dev / test / prod SQL计算机)。

    如果您无权访问实际的生产机器(例如,如果您在共享主机上使用托管公司,则这可能不是您的解决方案。

    © www.soinside.com 2019 - 2024. All rights reserved.