我正在使用AWS Lambda和DynamoDB开发应用程序。尝试测试lambda函数时出现以下错误。
错误:
{ “ errorType”:“ AggregateException”, “ errorMessage”:“发生一个或多个错误。(无法从程序集'AWSSDK.Core,版本= 3.3.0.0,文化=中性,PublicKeyToken = 885c28607f98e604'中加载类型'Amazon.Runtime.Internal.AsyncRunner'。)”, “堆栈跟踪”: [ “在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)”, “在System.Threading.Tasks.Task.Wait(Int32毫秒超时,CancellationToken cancelledToken)”, “在ProChiller.SyncDevices.QueryDevices(设备输入)”, “在lambda_method(Closure,Stream,Stream,ContextInfo)” ], “原因”:{ “ errorType”:“ TypeLoadException”, “ errorMessage”:“无法从程序集” AWSSDK.Core,Version = 3.3.0.0,Culture = neutral,PublicKeyToken = 885c28607f98e604“中加载类型'Amazon.Runtime.Internal.AsyncRunner'。”, “堆栈跟踪”: [ “在Amazon.DynamoDBv2.DataModel.DynamoDBContext.LoadAsync [T](Object hashKey,CancellationToken cancelleToken)上”, “在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的版本,以查看它的新版本和我的代码是否有问题。但是,无论我回滚到哪个版本,我仍然会遇到相同的错误。
我已经四处搜寻,希望有人对此类型加载有类似的问题,但是我可以找到有人写过关于此特定错误的文章,或者可以推论出的类似文章。我希望可能有针对该类型的特定SDK版本的文档,但找不到任何内容。
我发布的代码实际上是一个配对版本,在其中我尝试使其尽可能简单,以希望我正在做的其他事情导致此错误。
其他内部版本信息:
该应用程序是.Net Core 1.0。
AWSSDK.Core版本为3.3.24.3,但我确实注意到错误中的内容是“ version = 3.3.0.0”。
问题:
有人知道造成此类型加载错误的原因吗?我应该回滚到特定版本的SDK来解决此问题吗?还是我叫错了树?
在此先感谢您的帮助!
答案 0 :(得分:2)
简短的回答是,我认为您需要更新到更高版本的AWSSDK.DynamoDBv2。
我们有一个拉取请求,从AWSSDK.DynamoDBv2所需的AWSSDK.Core中删除了对AsyncRunner的需求,因此将其删除。事后发现您的问题不是正确的决定。如果同时更新AWSSDK.Core和AWSSDK.DynamoDBv2软件包,则可以,但在这种情况下,您仅更新了AWSSDK.Core,但旧版本的AWSSDK.DynamoDBv2仍从AWSSDK.Core引用AsyncRunner。
我将与团队讨论,并了解有关在这种情况下添加AsyncRunner的信息。