首页 文章

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

提问于
浏览
1

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

无法找到与其中一个目标运行时兼容的框架'.NETCoreApp,Version = v1.0'的运行时目标:'win10-x64,win81-x64,win8-x64,win7-x64' . 可能的原因:项目尚未恢复或恢复失败 - 运行dotnet restore项目未在“运行时”部分列出“win10-x64,win81-x64,win8-x64,win7-x64”之一 . 您可能正在尝试发布不受支持的库 . 使用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"
    }
  }
}

1 回答

  • 2

    我找到JeffRCorp posted on the AWS forums about having a similar issue,他们的步骤也适用于我 .

    首先,我编辑了 project.json 并将 Microsoft.NETCore.App 依赖项移动到 frameworks 部分(虽然我不确定这是否有所不同) . 我还删除了 runtimes 部分 . 最终的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 package ,它在 bin/Release/netcoreapp1.0 目录中构建了一个.zip文件 . 通过AWS控制台将其上传到AWS Lambda,瞧!

相关问题