首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure函数IWebJobsStartup实现中的ExecutionContext

Azure函数IWebJobsStartup实现中的ExecutionContext
EN

Stack Overflow用户
提问于 2019-04-10 23:57:37
回答 3查看 5.5K关注 0票数 16

如何在函数启动类中访问ExecutionContext.FunctionAppDirectory,以便正确设置我的配置。请参考以下启动代码:

代码语言:javascript
复制
[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();

        }
    }
 }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-11 01:18:58

你没有ExecutionContext,因为你的Azure函数还没有处理实际的函数调用。但是您也不需要它- local.settings.json会自动解析成环境变量。

如果你真的需要这个目录,你可以在Azure中使用%HOME%/site/wwwroot,在本地运行时使用AzureWebJobsScriptRoot。这相当于FunctionAppDirectory

This也是关于这个话题的一个很好的讨论。

代码语言:javascript
复制
    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:

代码语言:javascript
复制
{
  "IsEncrypted": false,
  "Values": {
    "APPINSIGHTS_INSTRUMENTATIONKEY": "123456..."
  }
}

示例SomeOther.json

代码语言:javascript
复制
{
  "hello":  "world"
}
票数 19
EN

Stack Overflow用户

发布于 2019-08-28 02:19:46

使用下面的代码,它对我很有效。

代码语言:javascript
复制
var executioncontextoptions = builder.Services.BuildServiceProvider()
         .GetService<IOptions<ExecutionContextOptions>>().Value;

var currentDirectory = executioncontextoptions.AppDirectory;

configuration = configurationBuilder.SetBasePath(currentDirectory)
          .AddJsonFile(ConfigFile, optional: false, reloadOnChange: true)    
          .Build();
票数 12
EN

Stack Overflow用户

发布于 2021-10-19 16:43:56

当文档说明函数应用程序中的默认值为%HOME%\site\wwwroot时,这意味着如果您不指定此环境变量,函数主机将使用%HOME%\site\wwwroot。

代码语言:javascript
复制
public void Configure(IWebJobsBuilder builder)
    {
        var localRoot = Environment.GetEnvironmentVariable("AzureWebJobsScriptRoot");
        var azureRoot = $@"{Environment.GetEnvironmentVariable("HOME")}\site\wwwroot";

        var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
            .SetBasePath(localRoot ?? azureRoot )
            .AddJsonFile("appsettings.json", true)
            .AddJsonFile("local.settings.json", true)
            .AddEnvironmentVariables()
            .Build();            
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55616798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档