启动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中的设置,但不是!
任何想法都值得赞赏!
答案 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