You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 REST API部署至AWS Lambda遇程序集加载失败问题求助

解决.NET 6 ASP.NET Web API部署AWS Lambda时的程序集加载错误

我之前处理过不少.NET 6迁移到AWS Lambda的案例,你遇到的LambdaValidationException: Unable to load assembly问题,核心原因是.NET 6的Program.cs采用了顶级语句的极简模式,和传统ASP.NET的Startup类结构完全不同——直接在LambdaEntryPoint里用builder.UseStartup<Program>()根本没法正确识别和加载程序集,因为Program类不再是那种包含ConfigureServices/Configure方法的传统启动类了。

接下来给你一步步解决的方案:

1. 重构LambdaEntryPoint的配置逻辑

放弃UseStartup<Program>这种旧方式,直接在LambdaEntryPoint里复用你Program.cs中的WebApplication构建逻辑,代码示例如下:

using Amazon.Lambda.AspNetCoreServer;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace MyAssembly;

public class LambdaEntryPoint : APIGatewayProxyFunction
{
    protected override void Init(IWebHostBuilder builder)
    {
        // 用.NET 6的WebApplicationBuilder来构建,把Lambda的WebHostBuilder传进去
        var webAppBuilder = WebApplication.CreateBuilder(new WebApplicationOptions
        {
            WebHostBuilder = builder
        });

        // 这里复制你Program.cs里的服务配置,比如你原来的AddControllers
        webAppBuilder.Services.AddControllers();

        var app = webAppBuilder.Build();

        // 再复制你Program.cs里的中间件配置,保持和本地运行一致
        app.UseRouting();
        app.UseAuthorization();
        app.MapControllers();

        // 不用调用app.Run(),Lambda会自己接管请求处理
    }
}

2. 确认依赖包版本适配.NET 6

一定要确保你用的Amazon.Lambda.AspNetCoreServer NuGet包是6.x及以上版本,老版本不支持.NET 6的新结构。可以用命令行更新:

dotnet add package Amazon.Lambda.AspNetCoreServer --version 6.0.0

3. 用官方命令打包,避免手动出错

别自己手动压缩文件,用AWS Lambda的官方打包命令生成部署包,这样能保证所有依赖都被正确包含:

dotnet lambda package --configuration Release --framework net6.0 --output-package bin/Release/net6.0/lambda-package.zip

4. 检查Program类的partial声明

你加的public partial class Program { }是对的(方便单元测试访问),但要注意这个类的命名空间必须和LambdaEntryPoint一致,而且你在AWS控制台填的程序集路径MyAssembly::MyAssembly.LambdaEntryPoint::FunctionHandlerAsync必须完全匹配实际的程序集名称和类名。

5. 调整测试事件(可选但推荐)

你的测试事件里isBase64Encoded设为true,但你的接口返回的是JSON文本,建议改成false,不然后续可能会出现返回结果解析异常:

{ 
    "resource": "/Home", 
    "path": "/Home", 
    "httpMethod": "GET", 
    "isBase64Encoded": false 
}

最后,重新打包部署到Lambda,再用调整后的测试事件试试。如果还是有问题,解压部署包看看有没有遗漏必要的.dll文件,或者检查Lambda执行角色的权限是否足够读取程序集。

内容的提问来源于stack exchange,提问作者TortillaCurtain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:23:10