Не удается прочитать файл local.settings.json при локальном запуске функции Azure - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь прочитать переменную среды при локальном тестировании функций 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

ОБНОВЛЕНИЕ: 9 сентября 2018 года - особая благодарность Каришме Тивари, которая направила меня в правильном направлении:

Проблема заключалась в том (как указал Каришма), что файл local.settings.json НЕ копируется в путь вывода, как показано ниже, путем сравнения настроек в проекте, который НЕ работает (слева), и Проект, который работает (справа):

enter image description here

Решить:

  1. Щелкните правой кнопкой мыши local.settings.json -> Свойства
  2. Измените настройку «Копировать в выходной каталог» на: «Копировать, если новее»

Еще один момент, на который следует обратить внимание, это то, что MS документация гласит :

"... но мы рекомендуем использовать GetEnvironmentVariable ...",

Проблема решена.

1 Ответ

0 голосов
/ 06 сентября 2018

Я бы порекомендовал попробовать следующее:

  1. Прежде всего, попробуйте использовать ConfigurationManager.AppSettings["test"] вместо System.Environment.GetEnvironmentVariable ("test") и проверьте, получаете ли вы ожидаемый результат.

  2. Убедитесь, что ваш файл local.settings.json помечен, чтобы всегда копироваться в выходные данные сборки. (щелкнув по нему правой кнопкой мыши в Visual studio). Это скопирует ваши файлы в выходной путь, аналогичный bin \ debug ..

Дайте мне знать, если вы все еще видите ту же проблему.

...