我正在尝试将源代码中的特定于环境的变量组合到 App.config-file 和 AppSettings和ConnectionString中的现有配置适用于Azure WebJob(.NET Framework)的Azure应用服务。进行更改时,将所有环境变量都包含在App Services中会非常耗时。
浏览了有关App.config-transformations和Azure WebJobs的大量博客和帖子之后,添加ConfigurationBuilder似乎是重写环境特定的(非秘密)设置的最新方法。如果我没记错的话,它是在.NET 4.7.1中添加的。它似乎比SlowCheetah和脚本更有希望。
但是添加了自定义ConfigurationBuilder(类似于链接1所述)后,应用服务中指定的应用设置不再包含在结果中。我最后只获得了来自app.config-file和自定义ConfigurationBuilder的条目。在配置条目中进行自定义条目时,是否需要检索这些应用程序设置?还是应该扩展EnvironmentVariables并修改这些XmlNode条目?
答案 0 :(得分:2)
看看以下链接,它们似乎解决了与您描述的问题类似的问题:
希望有帮助!
答案 1 :(得分:1)
事实证明,在确定可行的路线之前,需要考虑一些事项和一些假设。我最终在documentation的帮助下编写了自己的配置生成器。
鉴于使用的是.NETFramework,而不是AspNetCore(在这种情况下,尤其是.NETFramework 4.7.1)。看来由Azure设置的App Services确实使用了某种现成的配置生成器。似乎Web.config
没有任何指定的配置生成器将包括所有Azure App Services设置。它甚至会添加Web.config
中不存在的设置。因此不使用脚手架。这可能会使事情变得更容易掌握,但是Microsoft可能有充分的理由不采用这种方式实现事情。添加您自己的配置生成器将使从Azure App Services读取的所有设置不再被读取。我想可能是因为您只是替换了一个“隐藏的”配置生成器,而现在需要自己完成这项工作。
查看source code时,我做了另一个相关的发现,这对我编写自己的配置生成器很有帮助。配置构建器的工作方式似乎有两种典型的操作模式:贪婪或“严格”。我建议不要同时使用两者。贪婪模式意味着添加了在环境变量中找到的所有设置,而不管密钥最初是否出现在Web.config
中。 “严格”模式表示仅替换从一开始就存在的键的值。
我最终从环境变量中读取了相关设置。但是要找到使用的适当前缀的可靠文档有点棘手(尽管可以读取所有变量)。但是最常见的are roughly(我认为):
APPSETTING_
(如果我没记错的话,请相信它们与App Services设置相对应)SQLServerSQLCONNSTR_
SQLAZURECONNSTR_
无论如何,我的特定情况是在同一插槽中同时运行App Service Web App和WebJob。将Web应用程序的设置附加到WebJob似乎没有吸引力,也没有必要。因此,我编写了一个“严格的”配置生成器,从源头仔细地层叠了所有设置。这意味着还必须在Web.config
中定义Azure App Services中指定的任何设置。如果没有这样的设置,那么接下来将包括所选配置的任何转换值。最后,使用了Web.config
中的默认值。
总而言之,如果您正在.NETFramework中编写自己的配置生成器,则可能需要做一些工作以包含App Service应用程序设置或连接字符串。您可能想研究ConfigurationBuilder
类及其分别用于类型类或ProcessConfigurationSection
的方法ProcessRawXml
,并可能检查一些real world examples。