我正在設置一個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