我无法再使用 Azure Function 从 local.setting.json 获取值

问题描述 投票:0回答:3

我能够使用

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
3个回答
7
投票

尝试以下操作:

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

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


1
投票

在我的例子中,

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

这是我的 local.settings.json

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

在我的启动课程中,这是我的

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);

0
投票

我的问题是尝试在 local.settings.json 中创建列表,例如:

array1: [
  "value1",
  "value2"
]

不支持此功能,请修复发现的问题此处

© www.soinside.com 2019 - 2024. All rights reserved.