【问题标题】:I can no longer get the values from local.setting.json with Azure Function我无法再使用 Azure 函数从 local.setting.json 获取值
【发布时间】:2018-11-20 09:27:01
【问题描述】:

我能够使用 Environment.GetEnvironmentVariable("test1"); 从 local.setting.json 获取和使用值 现在好像没有办法得到这个文件和他的值。我只知道我团队中的另一位开发人员更改了某些内容,然后就不再工作了...(我无法理解他更改的内容可能是问题所在)

实际上为了测试我试过这个:

var appSettings = new ConfigurationBuilder()
                        .SetBasePath(context.FunctionAppDirectory)
                        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                        .AddEnvironmentVariables()
                        .Build();

var b = appSettings["test1"];
var c = appSettings["test2"];

var d = Environment.GetEnvironmentVariable("test1", EnvironmentVariableTarget.Machine);
var e = Environment.GetEnvironmentVariable("test1", EnvironmentVariableTarget.User);
var f = Environment.GetEnvironmentVariable("test1", EnvironmentVariableTarget.Process);
var g = Environment.GetEnvironmentVariable("test1");

在此之后所有变量都为空

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "test1": "abcd",
    "test2": "efgh"
   }
 }

我使用的是visual studio 2017,项目是Azure Functions,文件local.settings.json与function.cs处于同一级别。

可能是什么?

谢谢!

【问题讨论】:

    标签: c# azure environment-variables azure-functions


    【解决方案1】:

    尝试以下方法:

            var configuration = new ConfigurationBuilder()
                 .SetBasePath(Directory.GetCurrentDirectory())
                 .AddJsonFile("local.settings.json", true, true)
                 .Build();
    

    您的 context.FunctionAppDirectory 可能不正确。还请右键单击配置文件 -> 配置 -> 高级 => 将复制到输出目录设置为如果较新则复制。

    【讨论】:

    • 我也有同样的问题,但这个解决方案对我没有用。我已经验证我的 local.settings.json 也被复制到我的输出目录中。我使用过context.FunctionAppDirectoryDirectory.GetCurrentDirectory(),但我的值没有显示为环境变量stackoverflow.com/questions/56677093/…
    【解决方案2】:

    在我的例子中,local.settings.json 的内容由IConfigurationBuilder 读取,但是由于某种原因,它们没有加载到环境变量列表(Environment.GetEnvironmentVariables()) 中,因此Environment.GetEnvironmentVariable 永远不会读取它们。所以我在我的 Startup 类中,我手动将变量附加到当前进程。

    这是我的 local.settings.json

    {
      "Values" : { "Region": "southeastasia" }
    }
    

    在我的 Startup 课程中,这是我的IConfigurationRoot

        var configuration = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                        .AddEnvironmentVariables().Build();
    

    以下是我将它们附加到流程中的方式:

    Environment.SetEnvironmentVariable("Region", configuration.GetValue<string>("Values:Region"), EnvironmentVariableTarget.Process);
    

    现在您的Environment.GetEnvironmentVariable 应该如下所示:

    string region = Environment.GetEnvironmentVariable("Region", EnvironmentVariableTarget.Process);
    

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多