Git中web.config的两个不同的连接字符串

时间:2014-06-27 19:50:05

标签: asp.net git web-config

我是Git的新手,我目前正在将SVN中的项目迁移到Git。它目前的工作方式是服务器上有一个dev目录,服务器上有一个生产目录。开发和生产都有一个单独的数据库,因此在各自的web.config中有不同的连接字符串。我将使用gitflow工作流,所以当变更准备好生产时我将把dev合并到master中,所以我需要让dev分支上的web.config有一个连接字符串并且有一个单独的连接生产分支上的字符串。有没有合乎逻辑的方法呢?

3 个答案:

答案 0 :(得分:8)

在asp.net中,您可能需要查看web.config transformation。您的项目中可能已经有web.release.config和web.debug.config。它们可用于切换连接字符串,具体取决于您用于构建应用程序的构建配置(构建,调试等)。

我遇到的另一个想法是将连接字符串包含在一个单独的文件中:

<configuration>  
    <connectionStrings configSource="connectionStrings.config" />
</configuration>

会导致.NET从connectionStrings.config文件加载连接字符串。然后在版本控制中忽略该文件,并在本地开发环境中分发dev版本,将暂存版本放在登台服务器上,然后生产版本保持生产。

肯定有更多的解决方案,而不仅仅是这些。但是,在较小的gitflow类型环境中,我对这两个选项都运气不错。

答案 1 :(得分:3)

以下是我将如何做的一个实例......

编辑我的Web.Config文件
注意:名称:DefaultConnection,LocalConnection,livedbsource,localdbsource,localMachineName

 <connectionStrings>
 <!--Live-->
 <add name="DefaultConnection" connectionString="Data Source=livedbsource;Initial Catalog=livedbname;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
<!--Dev-->
<add name="LocalConnection" connectionString="Data Source=localdbsource;Initial Catalog=localdbname;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
</connectionStrings>

对于ApplicationDbContext

static string ServerName = System.Net.Dns.GetHostName();
//setting what connection string to use - tenary operator
static string ConnectionStringID = 
        (ServerName == "localMachineName") ? "LocalConnection" : "DefaultConnection";
public ApplicationDbContext(): base(ConnectionStringID, throwIfV1Schema: false)
{
}

在Windows 7及更高版本上,您可以按Windows徽标并搜索系统信息获取localMachineName,然后查找“系统名称”

以下是我在Visual Studio 2017中在直播项目中完成的YouTube视频,它运行良好。

https://youtu.be/oKg6ewKhkYs

答案 2 :(得分:2)

您应该使用Web.config Transformations进行基于部署的配置。他们可以在分支机构之间旅行,因为它们在所有分支上都应该是相同的。

但是对于本地开发,Web.configGit Attributes是你应该使用的。

只需在项目的根目录中创建一个.gitattributes文件(.git/文件夹所在的位置)并将以下行放在文件中:

Web.config merge=ours

每次将分支与更新的Web.config文件合并时,它都会保留您当前的更改。