Я разрабатываю приложение с использованием AWS Lambda и DynamoDB. Я получаю сообщение об ошибке ниже, когда пытаюсь проверить свою лямбда-функцию.
Ошибка:
{ "errorType": "AggregateException", "errorMessage": "One or more errors occurred. (Could not load type 'Amazon.Runtime.Internal.AsyncRunner' from assembly 'AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604'.)", "stackTrace": [ "at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)", "at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)", "at ProChiller.SyncDevices.QueryDevices(Devices input)", "at lambda_method(Closure , Stream , Stream , ContextInfo )" ], "cause": { "errorType": "TypeLoadException", "errorMessage": "Could not load type 'Amazon.Runtime.Internal.AsyncRunner' from assembly 'AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604'.", "stackTrace": [ "at Amazon.DynamoDBv2.DataModel.DynamoDBContext.LoadAsync[T](Object hashKey, CancellationToken cancellationToken)", "at ProChiller.SyncDevices.d__6.MoveNext()" ] } }
Как видите, кажется, что невозможно загрузить AsyncRunner из AWSSDK.
Код:
private static AmazonDynamoDBClient amazonDynamoDBClient = new AmazonDynamoDBClient();
public static Devices GetDeviceHandler(Devices input, ILambdaContext context)
{
var task = QueryDevices(input);
task.Wait();
return task.Result;
}
static async Task<Devices> QueryDevices(Devices device)
{
DynamoDBContext dbctx = new DynamoDBContext(amazonDynamoDBClient);
var operation = dbctx.LoadAsync<Devices>(device.TccvID);
Devices devices = await operation;
return devices;
}
Что я пробовал:
Я пробовал несколько разных способов запросов с Dynamo, но этот метод самый чистый и обычно дает мне те результаты, которые я ищу.
Клянусь, у меня когда-то работал этот или очень похожий код, и в прошлом у меня были проблемы с версией SDK, вызывающие проблемы при ее обновлении. Я попытался откатить версию AWSSDK.Core, чтобы проверить, не связана ли это с новой версией и моим кодом. Однако независимо от того, к какой версии я откатываюсь, я все равно получаю ту же ошибку.
Я искал в Google в надежде, что у кого-то была аналогичная проблема с загрузкой этого типа, но я мог найти кого-нибудь, кто писал об этой конкретной ошибке или об одной достаточно похожей, чтобы я мог экстраполировать. Я надеялся, что, возможно, есть документация по конкретной версии SDK, которую я должен использовать для этого типа, но не смог ничего найти.
Код, который я опубликовал, на самом деле представляет собой спаренную версию, в которой я попытался сделать его как можно более простым в надежде, что что-то еще, что я делал, вызывало эту ошибку.
Другая информация о сборке:
Это приложение .Net Core 1.0.
Версия AWSSDK.Core - 3.3.24.3, но я заметил, что в ошибке написано «версия = 3.3.0.0».
Вопрос:
Кто-нибудь знает, что может вызвать эту ошибку загрузки типа? Есть ли конкретная версия SDK, к которой я должен вернуться, чтобы исправить это, или я лаяю не на то дерево?
Заранее благодарю за любую помощь!





Короткий ответ: я думаю, вам нужно обновить AWSSDK.DynamoDBv2 до более новой версии.
У нас был запрос на перенос, который устранил необходимость в AsyncRunner из AWSSDK.Core, который требовался для AWSSDK.DynamoDBv2, и поэтому он был удален. Оглядываясь назад на вашу проблему, это решение было неправильным. Если вы обновите пакеты AWSSDK.Core и AWSSDK.DynamoDBv2, все будет в порядке, но в этом случае вы обновили только AWSSDK.Core, но ваша более старая версия AWSSDK.DynamoDBv2 по-прежнему ссылается на AsyncRunner из AWSSDK.Core.
Я поговорю с командой и посмотрю, как снова добавить AsyncRunner для подобных случаев.
Таким образом, обновление DynamoDBv2 до 3.3.10.3 решает эту проблему, просто протестируйте ее.
Рад, что вы снова работаете, извините за проблему, и мы вернем класс, чтобы уменьшить количество других разработчиков, сталкивающихся с этой проблемой.
Да, я думаю, что пытался обновить оба, но обнаружил, что было что-то еще, что было устаревшим, что сломало другой кусок кода. Итак, я пришел к тому, что считал рабочим состоянием. Я действительно обнаружил, что если я создал новый проект с .net core 2 и загрузил новейшие пакеты, я смог заставить все работать. Так что, в конце концов, решение может заключаться в том, чтобы просто перенести все на более новый фреймворк. При условии, что я смогу получить разрешение потратить на это время. :)