Могу ли я, как мне, передать файл настроек в функцию Azure? - PullRequest
0 голосов
/ 17 сентября 2018

При переносе приложения, использующего файл настроек, в функцию Azure, необходимо ли удалять зависимость от файла?

Я хочу написать приложение функции для импорта данных из Xero в базу данных SQL Azure.,Xero SDK, который я использую, ожидает файл appsettings.json.

Следовательно, когда запускается функция, я получаю сообщение об ошибке

System.Private.CoreLib: Exception while executing function:
FunctionXeroSync. Xero.Api: The type initializer for 
'Xero.Api.Infrastructure.Applications.Private.Core' threw an exception. 
Microsoft.Extensions.Configuration.FileExtensions: The configuration file 
'appsettings.json' was not found and is not optional. The physical path is 
'C:\Users\kirst\AppData\Local\AzureFunctionsTools\Releases\2.6.0\cli\appsettings.json'.

Я попытался вставить соответствующие настройки через Управление настройками приложенияссылка на вкладку «Публикация проекта VS2017».Очевидно, что это не удается.Есть ли другой способ, которым я могу использовать?

Вот соответствующий код в API.Я бы предпочел не изменять его, чтобы использовать официальный пакет nuget.

namespace Xero.Api
{
    public class XeroApiSettings : IXeroApiSettings
    {
        public IConfigurationSection ApiSettings { get; set; }

        public XeroApiSettings(string settingspath)
        {

            var builder = new ConfigurationBuilder()
                .AddJsonFile(settingspath)
                .Build();

            ApiSettings = builder.GetSection("XeroApi");
        }
        public XeroApiSettings() : this("appsettings.json")
        {
        }

        public string BaseUrl => ApiSettings["BaseUrl"];

        public string CallbackUrl => ApiSettings["CallbackUrl"];

        public string ConsumerKey => ApiSettings["ConsumerKey"];

        public string ConsumerSecret => ApiSettings["ConsumerSecret"];

        public string SigningCertificatePath => ApiSettings["SigningCertPath"];

        public string SigningCertificatePassword => ApiSettings["SigningCertPassword"];

        public string AppType => ApiSettings["AppType"];

        public bool IsPartnerApp => AppType?.Equals("partner", StringComparison.OrdinalIgnoreCase) ?? false;
    }
}

Когда я добавляю

    log.LogInformation("base directory: "+AppDomain.CurrentDomain.BaseDirectory);

к функции, я получаю

 D:\Program Files (x86)\SiteExtensions\Functions\2.0.12095-alpha\32bit\

при работе на портале

Ответы [ 2 ]

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

При переносе приложения, использующего файл настроек, в функцию Azure, необходимо ли удалять зависимость от файла?

Не обязательно, мы все еще можем использовать файл настроек, требуемый приложением. Нам нужно только убедиться, что путь к файлу настроек правильный.

  1. Поместите appsettings.json в функциональный проект и установите его для копирования в каталог output / publish.

    set file property

  2. Добавьте ExecutionContext context в сигнатуру метода функции Azure, она используется для поиска каталога приложения текущей функции (где находится appsettings.json).

  3. Передайте действительный путь к appsettings.json в функции Azure для инициализации XeroApiSettings.

    var xeroApiSettings = new XeroApiSettings(context.FunctionAppDirectory+"/appsettings.json");
    
0 голосов
/ 19 сентября 2018

В этом блоге Джона Галланта предполагается, что вам нужно добавить необязательный параметр в AddJsonFile, поскольку он не существует при развертывании:

var config = new ConfigurationBuilder()
    .SetBasePath(context.FunctionAppDirectory)
    .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

Обратите внимание, что в Azure это будетобратитесь к файлу appsettings.json

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