Я пытаюсь прочитать переменную среды при локальном тестировании функций 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 !!!!
Странная часть в том, что у меня есть другой проект (тот же код, что и выше), и он работает просто отлично. Единственная разница в сборках - это DLL-библиотека Microsoft.Net.Sdk.Functions (1.0.19) и (1.0.13) - текущий проект (который НЕ работает) использует 1.0.19 - поэтому я понизил до 1.0 .13 - но он не сделал различий!
![project differences](https://i.stack.imgur.com/AokDn.jpg)
ОБНОВЛЕНИЕ: 9 сентября 2018 года - особая благодарность Каришме Тивари, которая направила меня в правильном направлении:
Проблема заключалась в том (как указал Каришма), что файл local.settings.json НЕ копируется в путь вывода, как показано ниже, путем сравнения настроек в проекте, который НЕ работает (слева), и Проект, который работает (справа):
![enter image description here](https://i.stack.imgur.com/N7AJg.jpg)
Решить:
- Щелкните правой кнопкой мыши local.settings.json -> Свойства
- Измените настройку «Копировать в выходной каталог» на: «Копировать, если новее»
Еще один момент, на который следует обратить внимание, это то, что MS документация гласит :
"... но мы рекомендуем использовать GetEnvironmentVariable ...",
Проблема решена.