AWS Lambda使用.NET Core和Google表格API

时间:2017-03-11 13:34:26

标签: c# .net-core aws-lambda google-sheets-api

我正在使用C#运行时(.NET Core)编写使用AWS Lambda函数的Alexa技能,并尝试使用其API连接到Google表单。它在运行时抛出了一个丢失的DLL异常:

  

System.Security.Cryptography.CngKeyLite'的类型初始值设定项。抛出异常。

     

at System.Security.Cryptography.CngKeyLite.ImportKeyBlob(String blobType,Byte [] keyBlob)

     

at System.Security.Cryptography.RSAImplementation.RSACng.ImportKeyBlob(Byte [] rsaBlob,Boolean includePrivate)

     

在System.Security.Cryptography.RSAImplementation.RSACng.ImportParameters(RSAParameters参数)

     

at Google.Apis.Auth.OAuth2.ServiceAccountCredential.Initializer.FromPrivateKey(String privateKey)

     

at Google.Apis.Auth.OAuth2.DefaultCredentialProvider.CreateServiceAccountCredentialFromParameters(JsonCredentialParameters credentialParameters)

     

at Google.Apis.Auth.OAuth2.DefaultCredentialProvider.CreateDefaultCredentialFromParameters(JsonCredentialParameters credentialParameters)

     

在AlexaProjLib.GoogleSheet.Connect()

     

在AlexaProj.Function.FunctionHandler(SkillRequest输入,ILambdaContext上下文)

内部异常:

  

无法加载DLL' ncrypt.dll':找不到指定的模块。

代码:

var credential = GoogleCredential.FromJson(_googleSecret).CreateScoped(_scopes);

Service = new SheetsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = _applicationName,
});

我是.NET Core和Lambda的新手 - 如何正确引用丢失的DLL?

2 个答案:

答案 0 :(得分:0)

尝试按照this github forum中提供的说明进行操作,因为其他用户也会遇到此问题。

execute
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

instead of
ln -s /usr/local/Cellar/openssl/1.0.2h_1/lib/libcrypto.1.0.0.dylib /usr/local/lib
ln -s /usr/local/Cellar/openssl/1.0.2h_1/lib/libssl.1.0.0.dylib /usr/local/lib

if you receive "File exists" message ln -sf will do the magic..

ln -sf /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -sf /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

答案 1 :(得分:0)

问题结果是我在project.json文件(win10-x64)中定义了一个Windows运行时,这导致了这些运行时错误(AWS Lambda在Amazon Linux上运行)。最后使用 dotnet lambda package 编译并运行它,并提供更多详细信息here