我创建了一个新的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"];
那我该如何解决呢?
答案 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}}