一個服務或者產品,每每須要三個環境:一個開發環境(Development),一個測試環境(Staging),一個生產環境(Production),
這就不可避免的須要多個配置文件來匹配相應的環境,由於不可能三個環境都使用同一個配置,生產的數據直接就被污染了。shell
爲了便於管理全部的配置字符串,把他們集中在一個json文件,程序啓動時就序列化出來,有須要更新的時候,直接修改json文件便可,沒必要修改代碼,以避免regression或者引入新的bug。json
把開發的代碼部署到測試環境的時候,須要手動merge到測試環境的branch,這個merge過程,須要把修改配置文件;
同理,在測試環境經過好,部署到生產環境時,還要再次手動merge一次到production的branch,以後VSTS部署merge後的branch。app
這個過程,繁雜不說,不免出現配置遺漏,錯配,或者交接的困難,畢竟誰都有犯迷糊的時候。ide
.Net Core的project,都有一個startup.cs文件,這個文件是服務啓動的時候就會執行的過程,因此選在這裏把須要的依賴注入,進行初始化:函數
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); //Get key vault URL and environment var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>(); EnvironmentSettings settings = SettingsProvider.Settings(appSettings.KeyVaultURI, appSettings.Environment); ServiceManager.Initialize(settings); }
這個構造函數的參數env,帶有環境變量的值:env.EnvironmentName,根據這個值的不一樣,在項目裏添加三個settings的json文件。工具
每個josn裏面的結構必須保持一下,這樣序列化的時候才能正常解析正確的值。固然,也要符合json的語法,可使用json校驗工具檢查一下。測試
.net Core的項目文件,在PackageRoot下,都有一個ServiceManifest.xml文件,把一下代碼加入進去,要注意的是環境變量的Name必須是:ASPNETCORE_ENVIRONMENT
不然讀取失敗。ui
默認是開發環境(Development)。.net
在Service fabric下,有個ApplicationManifest.xml3d
這個文件能夠配置對應的參數列表(parameters),添加一列環境變量:
在這個文件的下方,在須要根據環境變量讀取配置的project對應節點內,添加環境變量的Name-Value,這裏[Environment]的意思是,讀取上圖中的Environment參數對應的值。
在ApplicationParamerters文件夾下,添加對應的參數文件,每一個文件的內容就是對應部署環境的配置文件的名稱:
publish的時候,選擇對應部署環境的xml文件便可:
這樣,主要部署的時候,選對了相應的xml文件,程序啓動的時候,startup就能夠正確讀取到對應的配置。
這應就減小課不少出錯的可能,項目交接的時候,也不省了很多交接內容。
參考:https://stackoverflow.com/questions/33928204/where-do-you-set-and-access-run-time-configuration-parameters-per-environment-fo
https://docs.microsoft.com/en-us/powershell/module/servicefabric/new-servicefabricapplication?view=azureservicefabricps
若是以爲有幫助,就點個推薦吧; 若是寫的很差,歡迎評論指出。