設定を正しく設定できるように、Functions StartupクラスのExecutionContext.FunctionAppDirectoryにアクセスする方法。次のスタートアップコードを参照してください。
[Assembly: WebJobsStartup(typeof(FuncStartup))]
namespace Function.Test
{
public class FuncStartup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var config = new ConfigurationBuilder()
.SetBasePath(“”/* How to get the Context here. I cann’t DI it
as it requires default constructor*/)
.AddJsonFile(“local.settings.json”, true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
}
}
Azure関数が実際の関数呼び出しをまだ処理していないため、ExecutionContext
がありません。しかし、それも必要ありません-local.settings.jsonは自動的に解析されて環境変数に変換されます。
本当にディレクトリが必要な場合は、%HOME%/site/wwwroot
Azureで、ローカルで実行する場合はAzureWebJobsScriptRoot
。これはFunctionAppDirectory
と同等です。
This もこのトピックに関する良い議論です。
public void Configure(IWebJobsBuilder builder)
{
var local_root = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot");
var Azure_root = $"{Environment.GetEnvironmentVariable("HOME")}/site/wwwroot";
var actual_root = local_root ?? Azure_root;
var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
.SetBasePath(actual_root)
.AddJsonFile("SomeOther.json")
.AddEnvironmentVariables()
.Build();
var appInsightsSetting = config.GetSection("APPINSIGHTS_INSTRUMENTATIONKEY");
string val = appInsightsSetting.Value;
var helloSetting = config.GetSection("hello");
string val = helloSetting.Value;
//...
}
Local.settings.jsonの例:
{
"IsEncrypted": false,
"Values": {
"APPINSIGHTS_INSTRUMENTATIONKEY": "123456..."
}
}
例SomeOther.json
{
"hello": "world"
}
以下のコードを使用してください、それは私のために働きました。
var executioncontextoptions = builder.Services.BuildServiceProvider()
.GetService<IOptions<ExecutionContextOptions>>().Value;
var currentDirectory = executioncontextoptions.AppDirectory;
configuration = configurationBuilder.SetBasePath(currentDirectory)
.AddJsonFile(ConfigFile, optional: false, reloadOnChange: true)
.Build();