有关管理配置文件中的连接字符串的建议

时间:2009-11-17 04:35:48

标签: asp.net web-config

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

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

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

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

有人有任何建议吗?我查看了web.config和Web部署项目中发生的转换,但这在开发/测试时没有帮助。

有什么想法吗?

谢谢, 麦克

4 个答案:

答案 0 :(得分:3)

这可能只是部分解决方案,但您可以将configSource属性添加到配置元素,以允许您从其他文件中获取该特定部分。这可用于隔离常见配置文件中的不同内容。

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

答案 1 :(得分:2)

这就是我的所作所为:

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

对于名称,请使用PC名称。您可以通过从命令提示符运行主机名来找到它。

然后你这样做:

<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;
}

答案 2 :(得分:1)

我这样做的方法是为每个环境设置一个单独的配置文件,通常标准的App或Web配置是本地连接字符串,其他配置命名为将环境预先设置为App或Web。

即。

  

prod_Web.config

     

beta_App.config

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

答案 3 :(得分:0)

我们通常使用多个web.config文件,让构建和部署过程整理出哪个文件与哪个环境相关。因此,我们的解决方案将为本地开发人员PC提供web.config,然后提供web.dev.config,web.test.config和web.prod.config。它确实导致配置文件中的重复,但允许在环境之间进行清晰的描述。由于我们的prod版本很少发生,我会手动检查添加到web.test.config的任何设置是否也在发布之前在web.prod.config文件中结束。