无法从程序集加载类型(C#Amazon lambda函数)
由于Amazon现在支持C#来构建AWS Lambda函数,我想尝试一下,但在执行测试时遇到了问题 这是我的简单课程:无法从程序集加载类型(C#Amazon lambda函数),c#,amazon-web-services,.net-core,aws-lambda,C#,Amazon Web Services,.net Core,Aws Lambda,由于Amazon现在支持C#来构建AWS Lambda函数,我想尝试一下,但在执行测试时遇到了问题 这是我的简单课程: using System; using System.IO; using System.Text; using Amazon.Lambda.Core; //using Amazon.Lambda.Serialization.Json; namespace MyTest { public static class LambdaFunction {
using System;
using System.IO;
using System.Text;
using Amazon.Lambda.Core;
//using Amazon.Lambda.Serialization.Json;
namespace MyTest
{
public static class LambdaFunction
{
public static string Handler(Stream stream)
{
return "Hello World";
}
}
}
我使用.Net核心运行时编译了它。结果是一个文件夹netstandard1.4,其中包含程序集MyTest.dll文件和MyTest.deps.json文件。这些压缩为.zip的文件将上载到AWS Lambda控制台
在“配置”选项卡中,处理程序定义为:
MyTest::LambdaFunction::Handler
但当我按下测试按钮时,返回的错误消息如下:
{
"errorType": "LambdaException",
"errorMessage": "Unable to load type 'LambdaFunction' from assembly 'MyTest, Culture=neutral, PublicKeyToken=null'."
}
注1:在我知道我需要使用.Net Core而不是完整的CLR之前,我得到了一个错误,程序集无法加载,因此我认为程序集现在可以编译了
注2:我已经尝试了处理程序方法的几种参数类型(尽管没有自定义序列化程序,只有流和字符串是受支持的),以及静态/实例类或方法或任何组合,但都没有效果
有谁已经开始工作了,可以给我一些建议吗?嗯,我想这是其中的一天 答案是,我忘了包含名称空间8| 应该是:
MyTest::MyTest.LambdaFunction::Handler
今天早些时候有同样的问题,我能够解决它,下面是应该传递的正确格式:
AssemblyName::NameSpace.ClassName::FunctionHandlerName
偶然发现了这个问题,但设置程序集名称并不能解决这个问题 这是你做的,是的。。。这是我代码中的一个bug
lambdaintrypoint.cs
立即传递到Startup.cs
。如果某个依赖项中存在问题或缺少appsettings.{env}.json
文件,则它将引发异常
这里是另一种检查应用程序是否在生产中运行的方法
$ export ASPNETCORE_ENVIRONMENT=Production
$ dotnet run
在我的例子中,缺少一个设置为require的appsettings.{env}.json
文件。不幸的是,lambda给了您一个非常匿名的错误,但是错误可能在生产中的Startup.cs
中
$ export ASPNETCORE_ENVIRONMENT=Production
$ dotnet run
这对大多数人没有帮助,但有1%的人忽略了一些简单的事情…我也收到了这个错误消息。在我的例子中,我调用了我的函数“HelloLambda”,但随后复制了一些代码,开始: 名称空间计算器 改成 名称空间HelloLambda
解决了这个问题我尝试了所有的解决方案,但都不管用 在我的例子中,解决方案是减少
AssemblyName::NameSpace.ClassName::FunctionHandlerName
组合的长度。此组合长度超过128个字符&lambda部署在windows上
将长度减少到小于127个字符开始在配置文件中工作
如果其他人面临类似问题,则添加解决方案。我也有同样的问题,而添加命名空间则没有help@RomanAsanov发布一个问题,展示你的代码。一定有区别。