在本地运行Azure功能时无法读取local.settings.json文件

问题描述 投票:4回答:1

我试图在本地测试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 - 但它没有任何差别!

project differences

更新:2018年9月9日 - 特别感谢Karishma Tiwari,他引导我朝着正确的方向前进:

问题是(正如Karismha指出的那样)local.settings.json文件没有被复制到输出路径,如下所示,通过比较项目中不工作的设置(左侧)和项目工作(右):

enter image description here

要解决:

  1. 右键单击local.settings.json - > Properties
  2. 将“复制到输出目录”设置更改为:“如果更新则复制”

另外需要注意的一点是,MS documentation states说:

“......但我们建议您使用GetEnvironmentVariable ......”,

问题解决了。

azure-functions
1个回答
1
投票

我建议尝试以下方法:

  1. 首先,尝试使用ConfigurationManager.AppSettings["test"]代替System.Environment.GetEnvironmentVariable(“test”)并检查是否获得了预期的结果。
  2. 确保将local.settings.json文件标记为始终复制到构建输出。 (在Visual Studio中右键单击它)。这会将您的文件复制到类似于bin \ debug的输出路径。

如果您仍然看到同样的问题,请告诉我。