我试图在本地测试Azure功能时读取环境变量(使用v1 .Net 4.7.1)
以下是功能代码:
[FunctionName( "test" )]
public static async Task<HttpResponseMessage> Run( [HttpTrigger( AuthorizationLevel.Anonymous, "post", Route = null )]HttpRequestMessage req, TraceWriter log )
{
String s;
log.Info( "test: Begin..." );
s = System.Environment.GetEnvironmentVariable( "test" );
if ( String.IsNullOrEmpty( s ) )
{
log.Info( "Unable to get environment key !!!!" );
}
else
{
log.Info( "Key value = " + s );
}
}
local.settings.json文件包含:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"test": "test_value"
}
}
该函数编译并运行,但永远不会返回环境键值,日志始终包含:
Unable to get environment key !!!!
奇怪的是我有另一个项目(与上面相同的代码),它工作得很好。程序集中唯一的区别是Microsoft.Net.Sdk.Functions DLL(1.0.19)vs(1.0.13) - 当前项目(不起作用)使用1.0.19 - 所以我降级到1.0 .13 - 但它没有任何差别!
更新:2018年9月9日 - 特别感谢Karishma Tiwari,他引导我朝着正确的方向前进:
问题是(正如Karismha指出的那样)local.settings.json文件没有被复制到输出路径,如下所示,通过比较项目中不工作的设置(左侧)和项目工作(右):
要解决:
另外需要注意的一点是,MS documentation states说:
“......但我们建议您使用GetEnvironmentVariable ......”,
问题解决了。
我建议尝试以下方法:
ConfigurationManager.AppSettings["test"]
代替System.Environment.GetEnvironmentVariable(“test”)并检查是否获得了预期的结果。如果您仍然看到同样的问题,请告诉我。