【问题标题】:AWS .NET SDK DynamoDB LoadAsync returning 'Could not load type' errorAWS .NET SDK DynamoDB LoadAsync 返回“无法加载类型”错误
【发布时间】:2018-12-21 06:58:48
【问题描述】:

我正在使用 AWS Lambda 和 DynamoDB 开发应用程序。当我尝试测试我的 lambda 函数时,出现以下错误。

错误:

{ "errorType": "AggregateException", "errorMessage": "发生了一个或多个错误。(无法从程序集 'AWSSDK.Core,Version=3.3.0.0,Culture=neutral,PublicKeyToken=885c28607f98e604' 加载类型 'Amazon.Runtime.Internal.AsyncRunner'。)", “堆栈跟踪”: [ “在 System.Threading.Tasks.Task.ThrowIfExceptional(布尔 includeTaskCanceledExceptions)”, “在 System.Threading.Tasks.Task.Wait(Int32 毫秒超时,CancellationToken cancelToken)”, “在 ProChiller.SyncDevices.QueryDevices(设备输入)”, “在 lambda_method(闭包,流,流,上下文信息)” ], “原因”: { "errorType": "TypeLoadException", "errorMessage": "无法从程序集 'AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604' 中加载类型 'Amazon.Runtime.Internal.AsyncRunner'。", “堆栈跟踪”: [ “在 Amazon.DynamoDBv2.DataModel.DynamoDBContext.LoadAsync[T](对象 hashKey,CancellationToken cancelToken)”, “在 ProChiller.SyncDevices.d__6.MoveNext()” ] } }

如您所见,它似乎无法从 AWSSDK 加载“AsyncRunner”。

代码:

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 的版本,看看它的新版本和我的代码是否有问题。但是,无论我回滚到哪个版本,我仍然会遇到相同的错误。

我四处搜索,希望有人对这种类型的 load 有类似的问题,但我可以找到任何人写过这个特定的错误,或者我可以推断出足够相似的错误。我希望也许有我应该为这种类型运行的特定 SDK 版本的文档,但找不到任何东西。

我发布的代码实际上是一个配对的版本,我试图让它尽可能简单,希望是我正在做的其他事情导致了这个错误。

其他构建信息:

应用程序是 .Net Core 1.0。

AWSSDK.Core 版本是 3.3.24.3,但我确实注意到错误中显示“version=3.3.0.0”。

问题:

有谁知道可能导致这种类型加载错误的原因是什么?是否有我应该回滚到的特定版本的 SDK 来解决这个问题,还是我在找错树?

提前感谢您的帮助!

【问题讨论】:

    标签: c# amazon-web-services aws-lambda amazon-dynamodb


    【解决方案1】:

    简短的回答是我认为您需要更新到较新版本的 AWSSDK.DynamoDBv2。

    我们有一个拉取请求,它从 AWSSDK.Core 中删除了 AWSSDK.DynamoDBv2 需要的 AsyncRunner 的需求,因此它被删除了。事后看到您的问题,删除它不是正确的决定。如果您同时更新您的 AWSSDK.Core 和 AWSSDK.DynamoDBv2 程序包,您会很好,但在这种情况下,您只更新了 AWSSDK.Core,但您的旧版本 AWSSDK.DynamoDBv2 仍然从 AWSSDK.Core 引用 AsyncRunner。

    我将与团队进行讨论,看看是否为此类情况添加回 AsyncRunner。

    【讨论】:

    • 是的,我想我曾尝试更新两者,但发现还有一些已被弃用的东西破坏了另一块代码。所以我最终进入了我认为的工作状态。我确实发现,如果我使用 .net core 2 创建了一个新项目并下载了最新的软件包,我就能让事情正常进行。所以最终解决方案可能只是将所有内容移植到更新的框架。假设我可以得到批准花时间在这上面。 :)
    • 所以更新到 DynamoDBv2 的 3.3.10.3 确实解决了这个问题,刚刚测试了一下。
    • 很高兴您再次工作,对此问题深表歉意,我们将重新添加该类以减少其他开发人员遇到此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2010-11-10
    相关资源
    最近更新 更多