【问题标题】:Change connection string from development to production when publishing发布时将连接字符串从开发更改为生产
【发布时间】:2015-11-30 02:00:23
【问题描述】:

我想知道如何自动更改我的应用程序的连接字符串,所以当我在我的电脑上处理它时,它使用我的本地 SQL Server,一旦我发布它,然后使用我在 azure 上托管的 SQL Server .

现在我只是根据我的需要注释掉连接字符串,我看到 Web.Config 文件有 2 个依赖项,Web.Debug.config 和 Web.Release.config 我猜我有做某事,但我不知道是什么。

到目前为止,这是我的 web.config 文件

<connectionStrings>
    <add name="MyApp" connectionString="Data Source=mydb.database.windows.net;Initial Catalog=MyDb;User ID=MyUser@mydb.database.windows.net;Password=MyPwd;Encrypt=true;Trusted_Connection=false;" providerName="System.Data.SqlClient" />
  <!--<add name="MyApp" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=MyDb;Integrated Security=True;" />-->
  </connectionStrings

如您所见,我有 2 个连接字符串已注释掉,但这样做真的很烦人。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-4 azure web.config-transform


    【解决方案1】:

    这两个配置是为各自的构建设置构建的,因此您可以将您的开发连接字符串放在Web.Debug.config 中,将您的产品连接字符串放在Web.Release.config 中。然后,当您部署到生产环境时,运行 Release 构建,生成的 Web.Config 将具有生产连接字符串。

    【讨论】:

    • 但我是否需要在 web.config 文件中或仅在 Web.Debug.config 和 Web.Release.config 中指定连接字符串?
    • @JGEstevez 每个配置都有自己的连接字符串。您必须在部署时选择适当的配置文件。
    【解决方案2】:

    你可以像这样拆分你的 web.config

    • web.dev.config
    • web.live.config

    在部署时选择适当的配置文件。 您可以访问此链接了解how to manage multiple web.config file in single project.

    如果您不想创建多个 web.config 文件,请参考 codeproject 中的 Single web.config file across all environments (dev, test, prod)

    【讨论】:

    • 使用多个配置文件是要走的路。虽然不是 OP 的要求,但如果有人将 codeproject 方法用于多个客户安装,即多个部署的相同代码库,这不会通过安全审计,因为可以在部署的代码中观察到其他安装的机密配置信息。
    • @JamieMeyer 赞赏
    【解决方案3】:

    您现在可以使用 Azure 通过应用设置中的连接字符串来处理这个确切的问题。您只需将连接命名为完全相同,然后它就会即插即用。

    https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-configure

    【讨论】:

      【解决方案4】:

      我决定绕过整个 web.config,而是集成一个函数,该函数根据运行它的当前机器确定连接字符串。要设置它,我必须设置我的 ApplicationDbContext() 以从函数中收集连接字符串,如下所示:

      public ApplicationDbContext() : base(CFFunctions.GetCFConnection())
      {
      }
      

      请注意,我的功能是静态

          public static string GetCFConnection()
          {
              string Connection = "";
      
              string Machine = System.Environment.MachineName.ToLower();
      
              switch(Machine)
              {
                  case "development":
                      Connection = @"Data Source=DEV_SRV;Initial Catalog=CeaseFire;Integrated Security=True"; 
                      break;
                  case "production":
                      Connection = @"Data Source=PRO_SRV;Initial Catalog=CeaseFire;Integrated Security=True";
                      break;
              }
      
              return Connection;
          }
      

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 2010-10-05
        • 1970-01-01
        • 2018-07-16
        • 2021-12-20
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多