文檔提到在2.0中沒有支持傳遞自定義環境變量,但EF核心1.0支持--environment參數。我覺得EF Core 2.0仍然支持此功能。
目前,我正在將多個應用程序部署到同一台計算機上,但在同一台計算機上部署了不同的版本。我正在使用Puppet自動化部分部署過程,最終使用IIS中的網站,例如Company.Project.[env]
。其中env
類似於.dev,.test,.uat,每個都在單獨的AppPool下運行等等。現在,使用ASP.NET Core 2.0,我可以為每個已部署的aspnet核心網站和該環境的web.config應用< environmentVariable
> web.config
變量優先於ASPNETCORE_ENVIRONMENT
任何機器環境變量。在puppet部署期間,它會在web.config中為ASPNETCORE_ENVIRONMENT變量插入正確的值,這對我來說非常有意義,並且允許每個已部署的應用程序仍然正確引導並加載到正確的appsettings.[environment].json
文件中。
現在,使用EF Core 2.0,我無法做到這一點。我計劃為每個環境部署一個單獨的數據庫項目,並為每個已部署的包添加環境名稱,就像我在網站上這樣做一樣,併計劃以某種方式傳入--environment以運行任何dotnet ef
命令並製作他們讀取正確的appsettings.[environment].json
文件,它將具有正確的目標數據庫環境連接字符串來運行遷移。
如果ASPNET Core網站支持web.config
的< environmentVariable
>,它允許將多個項目部署到使用唯一環境變量的同一台機器上。然後我覺得EF Core應該支持傳入--environment。
由於不再支持此功能,因此在同一台計算機上多次部署應用程序的最佳方法是運行dotnet ef
命令以定位特定的appsettings。[environment] .json以確保ef命令使用特定的連接字符串在已部署的項目中,然後在該計算機上的正確數據庫上運行遷移。
EF Core將支持將自定義參數傳遞給ef工具命令的方法。我發現有一個問題是跟踪此功能。
https://github.com/aspnet/EntityFrameworkCore/issues/8332
完成此操作後,可以將連接字符串或任何其他環境參數與ef命令一起傳遞。
遵循@Konrad的建議:
在您的項目路徑類型上運行的終端上
export ASPNETCORE_ENVIRONMENT =生產<-或您的環境
之後,您運行的任何命令都將使用您環境的appsettings.json(appsettings.Production.json)
我目前正在使用ASP Net Core 2.2