發展正如本文所述,當:https://azure.microsoft.com/en-us/blog/windows-azure-web-sites-how-application-strings-and-connection-strings-work/,Azure的Web應用程序/ Web站點/網上工作可以從環境變量,而不是他們的app.config配置設置(的appSettings,的connectionString)/ web.config中。配置Azure網站/工作應用程序設置本地
例如,如果存在名爲「APPSETTING_appSettingKey」環境變量,它將從app.config中/ web.config中覆蓋以下設置:
<appSettings>
<add key="appSettingKey" value="defaultValue" />
</appSettings>
一旦應用程序部署在Azure中也能正常工作,但我想在本地測試時使用相同的方法。
我嘗試在本地命令行來模擬這種:
ConfigurationManager.AppSettings["appSettingKey"]
當在Azure上運行,它讀出「overridedValue」爲:
> set APPSETTING_appSettingKey=overridedValue
> MyWebJob.exe
的Web作業使用訪問該設置預期的,但在本地它從app.config文件讀取值「defaultValue」。
我應該想到這個工作,或者這只是一個Azure的環境下實現的?
我能明顯創造超過ConfigurationManager中模仿這種抽象,但調用需要一個連接字符串名而不是一個連接字符串值代碼時,這是行不通的。另外,我想使用相同的方法,而不考慮環境來簡化設置的管理。
有3個原因,我需要這樣的:
1)我不喜歡部署到生產,它引用連接字符串等的研究與開發環境web.config文件的想法,是因爲有一個風險可能導致開發設置(在web.config中)用於生產(生產Web應用程序連接到開發數據庫等)的錯誤,例如,如果環境變量命名不正確(在web.config中重命名設置後但忘了在環境變量)
2)我想每個開發者都有自己的獨立雲資源建立開發環境將其重命名(存儲艾科不,數據庫...)。目前,每個人都必須手動編輯.config文件以引用正確的資源,並且在簽入或合併對這些文件的更改時要小心。
3)解決方案可以有需要複製相同的設置(主要的Web應用程序,網站工作,集成測試項目,...)多個項目。這導致了很多工作來確保更新的設置跨所有文件進行復制。如果有,沒有任何實際配置的環境無關的config文件
這將被簡化,每個開發人員會配置一組環境變量的一次,並且能夠使用他們的解決方案的所有部分。
你可以試試'CloudConfigurationManager'? – Thomas
在Azure網站/ Web作業下運行時,ConfigurationManager已經實現了類似於CloudConfigurationManager的行爲。我正在尋找的是一種在本地具有相同行爲的方式(如果存在,覆蓋環境變量的web.config設置)。我將編輯這個問題來解釋爲什麼我需要這個。 – ckarras
@ckarras我認爲你遇到的一個問題是,當你定義一個本地使用的應用程序設置時,那麼該應用程序設置(這可能是一個祕密)被部署到Azure,正如你所說,你不'不想要。您可能會發現使用web.config轉換在部署之前從配置文件中刪除這些值會很有幫助。對於webjobs(或任何具有app.config的項目),您需要使用SlowCheetah nuget包https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransforms。 – Howiecamp