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

C# 发布时将连接字符串从开发更改为生产,c#,asp.net,asp.net-mvc-4,azure,web.config-transform,C#,Asp.net,Asp.net Mvc 4,Azure,Web.config Transform,我想知道如何自动更改我的应用程序的连接字符串,这样当我在我的pc上处理它时,它会使用我的本地SQL Server,一旦我发布它,它就会使用我在azure上托管的SQL Server 现在我只是根据需要注释掉连接字符串,我看到Web.Config文件有两个依赖项,Web.Debug.Config和Web.Release.Config,我想这是我必须做的事情,但我不知道是什么 这是到目前为止我的web.config文件 <connectionStrings> <add na

我想知道如何自动更改我的应用程序的连接字符串,这样当我在我的pc上处理它时,它会使用我的本地SQL Server,一旦我发布它,它就会使用我在azure上托管的SQL Server

现在我只是根据需要注释掉连接字符串,我看到Web.Config文件有两个依赖项,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


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

您可以像这样拆分Web.Config

  • web.dev.config
  • web.live.config
在部署时选择适当的配置文件。 您可以访问此链接了解更多信息


如果您不想创建多个web.config文件,请参考codeproject

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


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

但是我是否需要在web.config文件中指定连接字符串,或者只在web.Debug.config和web.Release.config中指定连接字符串?@JGEstevez每个配置都有自己的连接字符串。您必须在部署时选择适当的配置文件。使用多个配置文件是一种方法。虽然不是OP的要求,但如果有人对多个客户安装使用codeproject方法,即对多个部署使用相同的代码库,这将无法通过安全审核,因为在部署的代码中可以看到其他安装的机密配置信息。@JamieMeyer