发布时将连接字符串从开发更改为生产

时间:2015-09-04 02:17:30

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

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

正如你所看到的,我有两个连接字符串,我已经注释掉了,但这样做真的很烦人。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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)

答案 2 :(得分:0)

现在,您可以使用Azure通过应用程序设置中的连接字符串来处理此问题。您只需要将连接命名为完全相同,然后即可即插即用。

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

答案 3 :(得分:0)

我决定绕过整个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;
    }