【问题标题】:Different configuration files for development and production in ASP.NET application在 ASP.NET 应用程序中用于开发和生产的不同配置文件
【发布时间】:2010-10-07 08:14:57
【问题描述】:

在我正在进行的一个项目中,我们有一个包含三个配置文件的 Web 应用程序; 网络配置 Web.Config.TestServer Web.Config.LiveServer

当我们发布到测试服务器时,Web.Config 重命名为 Web.Config.Development,Web.Config.TestServer 重命名为 Web.Config,从而使该配置对应用程序处于活动状态。

使三个非常相似的配置文件保持最新是相当繁重的,并且该系统用于作为该项目一部分的许多应用程序;不仅仅是网站。

配置差异最常见的是本地目录或路径、URL、IP、端口号和电子邮件地址。

我正在寻找更好的方法。

【问题讨论】:

    标签: asp.net configuration web-config


    【解决方案1】:

    虽然您的方法看起来很乏味,但我认为这是最好的方法。

    我以前将所有配置保存在一个 web.config 文件中,只是将“生产”部分注释掉。

    此后不久,我不得不进行“混合”测试,其中我的查找数据来自生产服务器,但新数据被插入到测试数据库中。那时,我不得不开始对配置块的哪些部分进行评论/取消评论,这变成了一场噩梦。

    同样,我们让我们的服务器管理员进行从测试到生产的实际迁移,但他们中的大多数人在 .NET 中不够流利,不知道如何管理 web.config 文件。他们更容易看到 .test 或 .prod 文件并向上迁移正确的文件。

    您可以使用数据库之类的东西来存储您的所有配置,但随后您会遇到另一个抽象层,您必须在此基础上对其进行管理。

    一旦您掌握了如何设置两个(或三个)配置文件的诀窍或模板,管理它们就会变得容易得多,并且您可以修改您的测试服务器配置以进行一些独特的测试,而无需太多麻烦.

    【讨论】:

    • 太好了,这里的答案是什么?
    • @DataGreed 虽然这个答案现在已经有四年了,但我想说如果您不能使用 Web.config 转换,请为您的不同环境保留单独的文件并迁移出适当的文件作为您的一部分部署计划。
    【解决方案2】:

    如果你有一个数据库服务器,你可以创建一个表,其中包含配置、属性名称和属性值,那么你所要做的就是在 web.config 中更改一个值,配置名称(dev、test、prod)。

    如果每个配置都有不同的数据库,那么唯一不同的是连接字符串。

    【讨论】:

      【解决方案3】:

      使用配置转换,这里有一篇关于它的博客。

      http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

      基本上,您创建名为 web.{build configuration}.config 的目标。在每个目标文件中编写转换,您可以在其中添加、删除和修改节点和属性。示例可能是

      web.staging.configss
      
      <?xml version="1.0"?> 
      <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
           <connectionStrings> 
              <add name="personalDB" 
                connectionString="Server=StagingBox; Database=personal; User Id=admin; password=StagingPersonalPassword" 
                providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)" /> 
              <add name="professionalDB" 
               connectionString="Server=StagingBox; Database=professional; User Id=professional; password=StagingProfessionalPassword" 
               providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)"/> 
             </connectionStrings> 
      </configuration>
      

      然后您通过调用 MSBuild {project file} /t:TransformWebConfig /p:Configuration=Staging 来执行转换

      【讨论】:

        猜你喜欢
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 2016-04-14
        • 1970-01-01
        • 2012-08-01
        • 2016-04-20
        • 2015-02-20
        相关资源
        最近更新 更多