我有三个数据库用于我的项目。我还有几个需要管理的环境。所有开发人员框,开发机器和分段框。因此,如果我有3个开发人员和3个数据库,这意味着要管理11个连接字符串(因为每个开发人员都有数据库的本地副本)。为了帮助管理这些连接字符串,我有几个解决方案配置设置。
除此之外,我们还有几个类库,每个库都有自己的单元测试项目。其中一些单元测试项目还必须指定在测试期间使用的连接字符串。
因此,如果我有一个web.config和四个带有app.config文件的测试项目,我必须拥有这些连接字符串的5个副本。
有比在所有这些配置文件之间复制/粘贴这些连接字符串更好的方法。
有人有任何建议吗?我查看了web.config和Web部署项目中发生的转换,但这在开发/测试时没有帮助。
有什么想法吗?
谢谢, 麦克
答案 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文件中结束。