我正在设置一个dev,qa,stage,production system of deployment。 I 希望能够将下一版本从一个环境发布到 ,而无需从VS重新发布,也无需手动 触摸任何文件。
这真是奇怪而不好的要求。在部署到不同环境期间重新配置应用程序是绝对常见的。与其在应用程序中对此进行硬编码,应该有不同的安装/部署脚本集,当从一个环境移动到另一个环境时,这些脚本也会更改您的配置文件。
为配置中的所有环境保持配置是恕我直言很糟糕的做法。
即使使用硬编码解决方案,您仍然需要更改一些“配置”来告诉应用程序当前运行的环境。硬编码解决方案将使用关于环境的信息从配置文件中选择正确的连接字符串并将其传递给上下文构造函数。
作为提到的方法的例子,你可以试试这个。它仍然会要求你在每次重新部署应用程序时更改环境变量 - 例如修改的复杂性在自定义部署脚本是完全一样的替换连接字符串:
配置文件:
<appSettings>
<add key="environment" value="Dev"/>
</appSettings>
<connectionStrings>
<add name="Dev" connectionString="..."/>
</connectionStrings>
代码上下文工厂方法:
public static YourContext ContextFactory()
{
string environment = WebConfigurationManager.AppSettings["environment"].Value;
// This should be correctly recognized as a name of connection string.
return new YourContext(environment);
}
上下文:
public class YourContext : DbContext
{
public YourContext(string connectionStringName) : base(connectionStringName)
{ }
}
[基于环境使用EF 4.1/DbContext切换连接字符串]的可能重复(http://stackoverflow.com/questions/7434753/switch-connection-strings-based-on-environment-with-ef-4-1- dbcontext) – Faust