2017-03-11 10 views
1

Ich schreibe eine Alexa-Fähigkeit, die eine AWS-Lambda-Funktion mit der C# -Runtime (.NET Core) verwendet und versuche, mithilfe ihrer API eine Verbindung zu einem Google-Blatt herzustellen. Es wirft eine fehlende DLL-Ausnahme während der Laufzeit:AWS Lambda mit .NET Core und Google Tabellen API

Die Typeninitialisierer für ‚System.Security.Cryptography.CngKeyLite‘ eine Ausnahme ausgelöst hat.

bei System.Security.Cryptography.CngKeyLite.ImportKeyBlob (String BlobType, Byte [] Schlüssel-Blob)

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

bei System.Security.Cryptography.RSAImplementation.RSACng.ImportParameters (RSAParameters Parameter)

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

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

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

bei AlexaProjLib.GoogleSheet.Connect()

bei AlexaProj.Function.FunctionHandler (SkillRequest Eingang, ILambdaContext Kontext)

Innere Ausnahme:

DLL 'ncrypt.dll' konnte nicht geladen werden: Das angegebene Modul konnte nicht gefunden werden.

Code:

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

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

ich ziemlich neu bin auf .NET-Core und Lambda - wie bekomme ich die fehlende DLL korrekt verwiesen wird?

+1

Gesundheitsprüfung: Fügen Sie Ihre Abhängigkeiten in die Zip, die Sie bis Lambda schieben? Lambda kann keine Pakete wiederherstellen. –

+0

@AnthonyNeace Ich habe die Zip von AWS heruntergeladen und herumgestochert - es enthält sicherlich keine ncrypt.dll, noch eine System.Security.Cryptography.CngKeyLite. In NuGet scheint kein CngKeyLite-Paket vorhanden zu sein, aber es gibt eine System.Security.Cryptography.Cng (die das Problem anscheinend nicht löst). – Ian

Antwort

0

Die Frage stellte sich heraus, dass ich einen Windows-Laufzeit in der project.json Datei (win10-x64) wurde definiert, die diese Laufzeitfehler verursacht wurde (AWS Lambda läuft auf Amazon Linux). Endete erhalten es kompiliert und läuft mit dotnet Lambda-Paket, mit weiteren Details here.

0

Versuchen Sie den Anweisungen in this github forum zu folgen, da andere Benutzer es auch gefunden haben.

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/