AWS Lambda和.NET Core – 使用Linux运行时?

我正在编写一个C#(.NET Core)的Alexa技能,可以从AWS Lambda函数(在Amazon Linux上运行)运行。 当我编译项目( dotnet发布 )时,我收到错误:

无法找到与其中一个目标运行时兼容的框架’.NETCoreApp,Version = v1.0’的运行时目标:’win10-x64,win81-x64,win8-x64,win7-x64’。 可能的原因:

  1. 项目尚未还原或还原失败 – 运行dotnet还原
  2. 该项目未在“运行时”部分列出“win10-x64,win81-x64,win8-x64,win7-x64”之一。
  3. 您可能正在尝试发布不受支持的库。 使用dotnet pack分发库。

如果我指定一个Windows运行时(例如win10-x64 ),它将编译正常,但是我的一个依赖项(Google表格API)在运行时由于基于Linux的Lambda而存在问题。 使用Linux运行时(例如debian.8-x64)将导致相同的编译错误。

当自己的平台是Linux时,为什么AWS SDK需要Windows运行时? 我觉得我错过了一些明显的东西,并且当有人将问题指出给我时,我会很高兴地面对掌心。

我的project.json文件(主应用程序和.NET Core类库项目):

AlexaProj

{ "version": "1.0.0-*", "buildOptions": { }, "dependencies": { "Microsoft.NETCore.App": "1.1.1", "Amazon.Lambda.Core": "1.0.0*", "Amazon.Lambda.Serialization.Json": "1.0.1", "Amazon.Lambda.Tools": { "type": "build", "version": "1.3.0-preview1" }, "Slight.Alexa.Core": "1.0.10-beta", "AlexaProjLib": "1.0.0-*" }, "tools": { "Amazon.Lambda.Tools": "1.3.0-preview1" }, "runtimes": { "win10-x64": { } <--- Compiles, but fails at runtime }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50" } } } 

AlexaProjLib

 { "version": "1.0.0-*", "dependencies": { "Google.Apis": "1.21.0", "Google.Apis.Core": "1.21.0", "Google.Apis.Oauth2.v2": "1.21.0.672", "Google.Apis.Sheets.v4": "1.21.0.798", "NETStandard.Library": "1.6.1" }, "frameworks": { "netstandard1.6": { "imports": "dnxcore50" } } } 

我发现JeffRCorp在AWS论坛上发布了类似的问题 ,他们的步骤也适用于我。

首先,我编辑了project.json并将Microsoft.NETCore.App依赖项移动到框架部分(尽管我不确定这是否有所不同)。 我还删除了运行时部分。 最终的project.json:

 { "version": "1.0.0-*", "buildOptions": { }, "dependencies": { "Amazon.Lambda.Core": "1.0.0*", "Amazon.Lambda.Serialization.Json": "1.0.1", "Amazon.Lambda.Tools": { "type": "build", "version": "1.3.0-preview1" }, "Slight.Alexa.Core": "1.0.10-beta", "AlexaProjLib": "1.0.0-*" }, "tools": { "Amazon.Lambda.Tools": "1.3.0-preview1" }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50", "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.1.1" } } } } } 

然后我运行了dotnet lambda包 ,它在bin / Release / netcoreapp1.0目录中构建了一个.zip文件。 通过AWS控制台将其上传到AWS Lambda,瞧!