ConfigurationBuilder не работает в функции Azure - PullRequest
0 голосов
/ 09 июня 2018

Я использую шаблон проекта функций Azure в VS2017 и выбираю версию 2 (бета) .Я опубликовал это без изменений, и это работало.

Я добавил пакет nuget Microsoft.Extensions.Configuration и написал один оператор для инициализации экземпляра ConfigurationBuilder

public static class Function1
{
    [FunctionName("Function1")]
    public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
    {
        var cb = new ConfigurationBuilder();// <<<<< added line
        log.Info("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = new StreamReader(req.Body).ReadToEnd();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

С этим кодомфункция вылетает с 500 - внутренняя ошибка сервера, и я не могу найти причину.

Я что-то упустил?Как получить доступ к информации о конфигурации в функциях Azure (v2.0)

Редактировать: выполнение в эмуляторе Compute создает System.Private.CoreLib: Исключительная ситуация при выполнении функции: Function1.Aweton.Labs.AzureFunc1: не удалось загрузить файл или сборку 'Microsoft.Extensions.Configuration, версия = 2.1.0.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60'.Система не может найти указанный файл.System.Private.CoreLib: не удалось загрузить указанный файл.

Ответы [ 4 ]

0 голосов
/ 25 марта 2019

У меня была такая же проблема.Чтобы элегантно работать, вам необходимо установить следующие пакеты nuget. Вам нужно установить Microsoft.Extensions.Configuration , чтобы это можно было инициировать с самого начала

Дополнительно

  • SetBasePath () требует:
    • Microsoft.Extensions.Configuration.Abstractions
  • AddJsonFile () требует:
    • Microsoft.Extensions.Configuration.FileExtensions
    • Microsoft.Extensions.Configuration.Json
  • AddEnvironmentVariables () требует:
    • Extensions.Configuration.EnvironmentVariables
    • и, возможно, Microsoft.Extensions.Configuration.UserSecrets

Для получения дополнительной информации см. Ниже https://www.koskila.net/how-to-access-azure-function-apps-settings-from-c/

0 голосов
/ 10 июня 2018

Отказ от ответственности : Я считаю, что моя среда Visual Studio 2017 постоянно обновляется службами уведомлений по состоянию на 15.7.3.

Настройка : создан новый проект функции Azure (Добавить новый проект, Облако, Функции Azure [ENTER], Предварительный просмотр функций Azure v2 (.NET Standard)) После завершения восстановления зависимостей VS устанавливает новый проект.в качестве точки запуска в решении и нажмите клавишу F5 для запуска локальной отладки.

VS2017 запускает dotnet, и вы можете найти строку типа

http://localhost:7071/api/Function1

Перейдите в браузере наURL, чтобы убедиться, что проект работает нормально.Теперь остановите отладчик.

Чтобы воспроизвести поведение :

Откройте диспетчер пакетов nuget и найдите Microsoft.Extensions.Configuration.На момент написания статьи он имел стабильную последнюю версию 2.1.0.Добавьте этот пакет в проект.Также, просто для удовольствия, добавьте System.Data.SqlClient (последняя версия 4.5.0). Теперь убедитесь, что ваш проект действительно зависит от DLL.Например, напишите следующее как первые операторы в методе Run;

        var cb = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
        var sc = new System.Data.SqlClient.SqlConnection();

Теперь снова запустите отладку.(F5) Хост функций по-прежнему загружается нормально, но при попытке обновить браузер окно консоли выдаст сообщение

[10.06.2018 15:37:28] Executing 'Function1' (Reason='This function was     programmatically called via the host APIs.',     Id=6804e02c-441a-4e62-b6a4-6b02154ec7fb) 
[10.06.2018 15:37:29] Executed 'Function1' (Failed, Id=6804e02c-441a-4e62-b6a4-6b02154ec7fb)
[10.06.2018 15:37:29] System.Private.CoreLib: Exception while executing function: Function1. FunctionApp-repro: Could not load file or assembly 'System.Data.SqlClient, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. System.Private.CoreLib: Could not load the specified file.

Обход : открыть диспетчер пакетов nuget и «обновить» систему.Data.SqlClient до версии 4.1.0 и Microsoft.Extensions.Configuration для версии 2.0.0

0 голосов
/ 27 июня 2018

Это должно быть решено в последней версии среды выполнения функций Azure (2.0.11888, CLI 2.0.1-beta.31).

0 голосов
/ 09 июня 2018

Вы можете получить доступ к файлу конфигурации, например, dev.settings.json, с помощью ConfigurationBuilder, указав базовый путь и имя файла.

public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, TraceWriter log, ExecutionContext context)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(context.FunctionAppDirectory)
            .AddJsonFile("dev.settings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

        var values = config["Values"];
        ...
    }
...