发展正如本文所述,当: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