c# - 在 Windows 环境与 Ubuntu 环境中执行 "dotnet lambda package"的不同包

标签 c# ubuntu aws-lambda bamboo aws-cli

因此,我一直致力于在 AWS 的 EC2 实例中启动并运行 Bamboo CI 服务器。一切都进展顺利;但是,我遇到了一个 hell 般的问题。 CI 部分工作正常,但与在我的 Windows 机器上执行“dotnet lambda publish”相比,在我的基于 Ubuntu 的 Bamboo 服务器上执行“dotnet lambda publish”开发的工件似乎创建了一个不兼容的包。当我部署由我的 Bamboo 服务器生成的包时,我只是收到以下错误:

{
  "errorType": "LambdaException",
  "errorMessage": "Unable to load assembly '<project-name>, Culture=neutral, PublicKeyToken=null'."
}

我查看了包的内容,尽管文件中没有明显的差异;文件大小有一些差异。在 Ubuntu 上生成的包大约为 14.8 MB,而在 Windows 上生成的包大约为 15.4 MB。

谁能解释这些打包过程之间的区别?为什么在针对 Ubuntu 进行编译时我会得到一个更小的包?为什么我的 Windows 包恰好可以工作,而 Ubuntu 包提示找不到文件?

我曾假设“dotnet lambda package”命令将专门为 Lambda 上下文构建工具,而不管操作系统环境如何。在不同的环境中使用相同的 CLI 命令创建不同且看似不兼容的构建似乎很奇怪。

编辑:经过进一步调查,我认为这与通过执行“dotnet lambda 包”cli 在 Bamboo CI 服务器上使用的压缩过程有关。当我将它本地带到我的 Windows 机器并尝试再次上传包时,它失败了。经过一番调查,我发现如果我在 Windows 上解压缩包,然后通过右键单击重新压缩并发送到 -> 压缩(压缩)文件夹,然后再次上传,将启动完全相同的文件内容在职的。也许这是“dotnet lambda 包”方法期间 zip 执行的问题?

最佳答案

在意识到我的编辑后,我决定与帮助创建 Amazon.Lambda.Tools 包的亚马逊人员取得联系。事实证明,如果你的 linux 机器上没有安装“zip”,它会自动假设你正在运行 Windows 机器,它会选择不正确的可执行文件来压缩使用“dotnet lambda package”创建的最终包.当它使用不正确的可执行文件时,应用的 chmod 命令不会被继承。

简单修复,执行:apt install zip

这将确保您的 Ubuntu 机器使用正确的 zip 可执行文件,并且生成的 zip 文件可以毫无问题地上传到 Lambda。

https://github.com/aws/aws-lambda-dotnet/issues/100

关于c# - 在 Windows 环境与 Ubuntu 环境中执行 "dotnet lambda package"的不同包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381815/

相关文章:

c# - 如何使用 C# 在 MonoGame 中移动我的 Sprite

c# - ASP.NET 核心 : IConfigurationBuilder Does Not Contain Definition For AddAzureKeyVault

php - Ubuntu 中的服务器上缺少 ZipArchive 类

python - Lambda + Python + 退出代码

python - 如何在 aws lambda/tmp 目录中运行 python 脚本

c# - 使用 LINQ 在运行时从数据库中获取数据

c# - AOP、Unity、方法的拦截

linux - Bash for循环从文本文件运行命令

ubuntu - docker 。从主机发送邮件

node.js - 在无服务器 lambda 中返回 HTTP 错误代码的正确方法是什么