Asp.net 关于管理配置文件中的连接字符串的建议

Asp.net 关于管理配置文件中的连接字符串的建议,asp.net,web-config,Asp.net,Web Config,我的一个项目有三个数据库。我还有几个需要管理的环境。所有开发人员箱、一台开发人员机器和一个临时箱。因此,如果我有3个开发人员和3个数据库,这意味着要管理11个连接字符串(因为每个开发人员都有数据库的本地副本)。为了帮助管理这些连接字符串,我有几个解决方案配置设置 除此之外,我们还有几个类库,每个类库都有自己的单元测试项目。其中一些单元测试项目还必须指定测试期间要使用的连接字符串 因此,如果我有一个web.config和四个带有app.config文件的测试项目,我必须有这些连接字符串的5个副本

我的一个项目有三个数据库。我还有几个需要管理的环境。所有开发人员箱、一台开发人员机器和一个临时箱。因此,如果我有3个开发人员和3个数据库,这意味着要管理11个连接字符串(因为每个开发人员都有数据库的本地副本)。为了帮助管理这些连接字符串,我有几个解决方案配置设置

除此之外,我们还有几个类库,每个类库都有自己的单元测试项目。其中一些单元测试项目还必须指定测试期间要使用的连接字符串

因此,如果我有一个web.config和四个带有app.config文件的测试项目,我必须有这些连接字符串的5个副本

一定有比在所有这些配置文件之间复制/粘贴这些连接字符串更好的方法

有人有什么建议吗?我研究了web.config和web部署项目中发生的转换,但这在开发/测试期间没有帮助

有什么想法吗

谢谢,
Mike

我们通常使用多个web.config文件,并让构建和部署过程确定哪个文件与哪个环境相关。因此,我们的解决方案将为本地开发人员PC提供一个web.config,然后是一个web.dev.config、web.test.config和一个web.prod.config。它确实会导致配置文件之间的重复,但允许环境之间的清晰划分。由于我们的产品发布的频率很低,我将手动检查添加到web.test.config的所有设置,在发布之前,这些设置也会出现在web.prod.config文件中。

我这样做的方式是为每个环境创建一个单独的配置文件,通常,标准应用程序或Web配置是本地连接字符串,其他配置被命名为将环境预先挂起到应用程序或Web

prod_Web.config

beta_App.config


您可以在解决方案的vsmdi中使用部署选项,然后从测试菜单中选择要测试的环境。该功能本身就是一个gem。

这可能只是部分解决方案,但您可以将configSource属性添加到配置元素中,以允许您从不同的文件中获取该特定部分的源代码。这可用于隔离公共配置文件中的不同之处

请参阅以下内容并向下滚动到“如何为数据库连接字符串使用用户配置文件”部分

我就是这么做的:

<add key="PRODSSERVERNAME.DataBaseEnvironment"    value="PROD" />
<add key="STAGESERVERNAME.DataBaseEnvironment"    value="STAGE" />
<add key="DEVSERVERNAME.DataBaseEnvironment"    value="DEV" />

我不确定这能解决我的问题。也许最好将连接字符串保留在app.config中,并直接从.dll.config中取出。至少这样我就不必复制/粘贴任何连接字符串了。这让我成功了一半!本文展示了一种在每台开发人员机器上处理连接字符串的好方法。现在,我只需要找出管理类库中连接字符串的最佳方法,以便进行测试。
<add key="DB,DEV"           value="Data Source=[DEV STRING] />
<add key="DB,STAGE"         value="Data Source=[STAGE STRING] />
<add key="DB,PROD"          value="Data Source=[PROD STRING] />
protected string GetConnectionString() {
    string machineName  = String.Concat(System.Environment.MachineName, .DatabaseEnvironment");
    string environment  = ConfigurationManager.AppSettings[machineName];
    string Key       = String.Concat("DB", ",", environment);
    string value       = ConfigurationManager.AppSettings[ssoKey];

    return value;
}