WebJob启动时无法解析Azure应用程序设置中的配置

时间:2019-01-22 21:54:24

标签: c# azure azure-webjobs

启动WebJob(Program.Main())时,Azure应用程序设置中的配置项不会覆盖app.config中设置的值。

ConfigurationManager.AppSettings和CloudConfigurationManager.GetSetting都从app.config返回相同的值,而不是从Azure应用程序设置中覆盖

一旦注册了WebJob Function,Azure中的设置在启动后就可以正常访问

环境: VS2017 v15.8.5,
目标框架.NET Framework 4.6,
Microsoft.Azure.WebJobs v2.3.0,
Microsoft.Azure.WebJobs.Core v2.3.0,
Microsoft.Azure.WebJobs.Extensions v2.2.0,
Microsoft.Web.WebJobs.Publish v2.0.0
Microsoft.Azure.ConfigurationManager v4.0.0

1.App.config:

<appSettings>

    <add key="EXECUTION_ENVIRONMENT" value="PleaseSpecify" />

</appSettings>

2.Azure应用程序设置:

应用设置名称值

EXECUTION_ENVIRONMENT UAT

3.Program.cs:

class Program {

static void Main(string[] args)

{

// return "PleaseSpecify" instead of "UAT" in Azure

var ee1 = ConfigurationManager.AppSettings["EXECUTION_ENVIRONMENT"];

Console.WriteLine(ee1);

// return "PleaseSpecify" instead of "UAT" in Azure

var ee2 = Microsoft.Azure.CloudConfigurationManager.GetSetting("EXECUTION_ENVIRONMENT");

Console.WriteLine(ee2);

}

}

4。通过Visual Studio发布到Azure ...

5。检查WebJob日志将看到上面来源中注释的问题

我希望Azure中的设置优先于App.config中的设置,但不是!

任何想法都值得赞赏!

2 个答案:

答案 0 :(得分:0)

我明白你的问题了。众所周知,“应用程序设置”优先级高于app.config文件。实际上,这与优先级无关,但是“应用程序设置”将重写配置文件。因此,每次您更改“应用程序设置”时,网络或网络作业都会重新启动。

但是,如果您更改外部文件(如CommonSettings.config),则不会导致重新启动。因为您可以找到配置,所以在您的网络运行时,配置将保持不变。该值将从共享文件中检索。

这是我的结论:当您启动网站时,“应用程序设置”将注入该设置,然后这些设置就像普通设置一样,并且您添加了共享设置文件,此时网络将从“公共设置”中检索设置.config。您可以在app.config和外部文件here之间找到优先级。

如果您还有其他问题,请告诉我。

答案 1 :(得分:0)

感谢George的要点!

事实证明,对于Webjob,配置注入发生在部署时间中,在该时间中,Azure App设置实际上已写入App.config中。

对于普通的Web(API)应用程序,它的处理方式有所不同,其中App.config保持不变,但是Azure应用设置在运行时注入ConfigurationManager.AppSettings。

要完全解决Web(API)应用程序和WebJob上的问题,我正在构建一个Visual Studio生成后脚本,以将CommonSettings.config中的更改合并到Web.config / App.config中,其余的保留不变。因此,在我们的应用程序中,我们仅使用ConfigurationManager可靠地解析设置:Azure设置> Web / App.config> CommonSetting.config