找不到host.json

时间:2019-06-17 05:15:51

标签: azure azure-functions

我创建了一个新的azure函数,并且有一个步骤可以读取host.json,它可以在我的办公桌上使用,但是当我发布到Azure时,出现了错误:

  

找不到配置文件“ host.json”,它不是可选的。   物理路径为'D:\ Program Files   (x86)\ SiteExtensions \ Functions \ 2.0.12507 \ 32bit \ host.json'。

这是我尝试过的:

var Configuration = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("host.json",false)
                          .Build();

var value = Configuration["value"];

那我该如何解决呢?

2 个答案:

答案 0 :(得分:2)

如Volodymyr所述,您需要在Azure函数方法中传递ExecutionContext :。

public static async Task<IActionResult> Run( ... , ExecutionContext context) 
{
    ...
}

现在,在构建配置时,可以使用ExecutionContext.FunctionAppDirectory属性设置基本路径。我还可以选择添加local.settings.json进行本地调试:

var config = new ConfigurationBuilder()
    .SetBasePath(context.FunctionAppDirectory) // Here you include the app directory from the context
    .AddJsonFile("host.json", optional: false, reloadOnChange: true) 
    .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) // for local debugging
    .AddEnvironmentVariables()
    .Build();

为进一步改善代码,我建议为“设置”创建一个类。例如:

public sealed class FunctionSettings
{
    public string MySetting { get; set; } 
}

通过这种方式,您可以访问如下设置:

var settings = new FunctionSettings();
config.Bind(settings);

var value = settings.MySetting 

代替

var value = Configuration["MySetting"];

答案 1 :(得分:1)

您需要使用具有属性FunctionAppDirectory的{​​{3}}