Функция Azure v2 и system.text.json

Я пытаюсь реализовать функцию, которая использует .net core 3 (превью 9) в качестве целевой платформы и использует новое пространство имен System.text.json. Вот мой код:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using System.Text.Json;

namespace Backtester
{
    public class Test
    {
        public string Author { get; set; }
        public string Currency { get; set; }
    }

    public static class Function
    {
        [FunctionName("Function")]
        public static void Run([ServiceBusTrigger("%QueueName%", Connection = "AzureWebJobsServiceBus")]string myQueueItem, ILogger log)
        {
            try
            {
                var request = JsonSerializer.Deserialize<Test>(myQueueItem);
                log.LogInformation($"Currency: {request.Currency} - {request.Author}");
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}

Когда я запускаю код и отправляю сообщение в очередь служебной шины, функция запускается, но выдает следующую ошибку:

[13/09/2019 13:01:25] System.Private.CoreLib: Exception while executing function: Function. Backtester: Could not load file or assembly 'System.Text.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058). Cannot load a reference assembly for execution.
[13/09/2019 13:01:25] MessageReceiver error (Action=UserCallback, ClientId=MessageReceiver1********************, EntityPath=**********, Endpoint=**********************************)
[13/09/2019 13:01:25] System.Private.CoreLib: Exception while executing function: Function. Backtester: Could not load file or assembly 'System.Text.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058). Cannot load a reference assembly for execution.

Я прихожу к выводу, что мне придется понизить версию моего проекта до .net core 2.2, что потребует значительного объема работы, поскольку у меня есть веб-проект, работающий с использованием новой кодовой базы.


person Liam    schedule 13.09.2019    source источник


Ответы (1)


Первоначально моим решением было понизить рейтинг моего проекта до .net core 2.2 и использовать Netwonsoft Json.net (v11 в любом случае является зависимостью от Microsoft.AspNetCore.App и SignalR.Core). Я бы добавил, что json.net сейчас является гораздо более зрелым продуктом, поэтому я определенно рекомендую этот маршрут с самого начала.

С тех пор я фактически переместил свою функцию Azure в AWS Lambda, которая позволяет загружать настраиваемую среду выполнения, поэтому, если вы хотите использовать .net core 3 в облаке, вы можете пойти этим путем.

person Liam    schedule 19.11.2019