首页 文章

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

提问于
浏览
171

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

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

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

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

9 回答

  • 3

    在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转换 .

  • 4

    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工作进程
  • 137

    您是否查看了Web部署项目?

    http://www.microsoft.com/downloads/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en

    如果您不在2008年,还有VS2005的版本 .

  • 3

    我也想知道 . 这有助于我解决问题

    <connectionStrings configSource="connectionStrings.config"/>
    

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

    (而且我不使用VS,顺便说一下 . )

  • 24

    我使用NAnt构建脚本部署到我的不同环境 . 我让它通过XPath修改我的配置文件,具体取决于它们被部署到的位置,然后使用Beyond Compare自动将它们放入该环境中 .

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

    Here's我发现了一篇文章 .

  • 6

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

    这对我们有用,因为:

    • 管理员可以在不涉及开发人员的情况下部署应用程序(一项要求),而无需摆弄配置文件(他们讨厌的话);

    • 机器名称遵守惯例 . 我们使用正则表达式匹配名称并部署到环境中的多台机器上;和

    • 我们对连接字符串使用了集成安全性 . 这意味着我们可以在设计时将帐户名保留在配置文件中,而不会泄露任何密码 .

    在这种情况下,它对我们很有用,但可能无处不在 .

  • 73

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

  • 3

    您也可以将其作为构建后步骤 . 除了Debug和Release之外,还要设置一个“Deploy”的新配置,然后通过正确的web.config进行构建后步骤复制 .

    我们为所有项目使用自动构建,并且构建脚本更新web.config文件以指向正确的位置 . 但如果你从VS做的一切都没有帮助你 .

  • 12

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

    如果您无法访问实际的 生产环境 计算机(例如,如果您在共享主机上使用托管公司),这可能不适合您 .

相关问题