我能够使用
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 处于同一级别。
可能是什么?
谢谢!
尝试以下操作:
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("local.settings.json", true, true)
.Build();
您的 context.FunctionAppDirectory 可能不正确。另请右键单击配置文件 -> 配置 -> 高级 => 将复制到输出目录设置为复制如果较新。
在我的例子中,
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);