使用CDK部署含顶级语句的ASP.NET Minimal API到Lambda报错
解决方案:ASP.NET Minimal API Lambda + CDK 部署修复
1. 修正Lambda Handler配置
由于你的项目使用C#顶级语句,属于可执行程序集,Handler必须设置为程序集名称(而非类库的Assembly::Type::Method格式)。在CDK的Lambda构造中显式指定:
var lambdaFunction = new Function(this, "MinimalApiLambda", new FunctionProps { Runtime = Runtime.DOTNET_6, // 匹配你的项目TargetFramework版本 Handler = "lambdaMinimalApi", // 替换为你的Lambda项目程序集名称 Code = Code.FromAsset(Path.Combine("src/lambdaMinimalApi", "bin/Release/net6.0/publish")), MemorySize = 256, Timeout = Duration.Seconds(30) });
2. 确保Lambda项目的打包配置正确
在Lambda项目的.csproj文件中,确认输出类型为可执行文件:
<PropertyGroup> <OutputType>Exe</OutputType> <!-- 关键:必须是Exe,不能是Library --> <TargetFramework>net6.0</TargetFramework> <AWSProjectType>Lambda</AWSProjectType> <PublishTrimmed>true</PublishTrimmed> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup>
执行发布命令生成正确的部署包:
dotnet publish -c Release -f net6.0
3. 正确指定CDK的Code路径
CDK的Code.FromAsset必须指向发布后的输出目录(即bin/Release/netX.0/publish),而不是项目源码目录。这个目录包含Lambda运行所需的所有文件(可执行程序、依赖库等)。
4. 匹配运行时版本
确保CDK中设置的Runtime与Lambda项目的TargetFramework完全一致:
- .NET 6 →
Runtime.DOTNET_6 - .NET 7 →
Runtime.DOTNET_7 - .NET 8 →
Runtime.DOTNET_8
5. 验证部署包内容
发布完成后,检查publish目录是否包含:
lambdaMinimalApi.dll(你的程序集文件)lambdaMinimalApi(Linux可执行文件)- 所有依赖的NuGet包文件
CDK会将该目录的所有内容打包上传到Lambda,缺失任何关键文件都会导致运行错误。
内容的提问来源于stack exchange,提问作者Chris Rollings
相关产品推荐
相关产品推荐

