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

.NET 6迁移至.NET 8:AWS项目SAM/CDK构建AWSSDK.Core加载失败

.NET 8升级后开启PublishReadyToRun时AWS部署报错AWSSDK.Core加载失败的解决办法

问题场景

将两个AWS相关的.NET项目从.NET 6升级至.NET 8(一个基于CDK,一个基于SAM),本地构建无异常,但执行sam build或dotnet lambda deploy-function时触发以下CrossGen编译错误:

... publish:   BackendApi -> C:\workspace\BackendApi\bin\Release\net8.0\linux-arm64\BackendApi.dll
... publish: C:\Program Files\dotnet\sdk\8.0.303\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.CrossGen.targets(470,5): error : Error:
Failed to load assembly 'AWSSDK.Core' [C:\workspace\BackendApi\BackendApi.csproj]
... publish: C:\Program Files\dotnet\sdk\8.0.303\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.CrossGen.targets(470,5): error :
Internal.TypeSystem.TypeSystemException+FileNotFoundException: Failed to load assembly 'AWSSDK.Core'
[C:\workspace\BackendApi\BackendApi.csproj]

将<PublishReadyToRun>设为false后,部署恢复正常。已尝试升级Visual Studio、AWS CLI、SAM、AWS Toolkit及多个.NET 8版本,问题未解决。

解决方案

1. 统一所有AWSSDK包版本

你的项目中AWSSDK.EventBridge使用了3.7.401版本,其余AWSSDK包均为3.7.400.2,版本不一致会导致CrossGen预编译时依赖解析失败。将所有AWSSDK相关包统一为同一版本(建议升级至兼容.NET 8的最新稳定版,或统一为3.7.401)。

2. 排除AWSSDK.Core的ReadyToRun预编译

若统一版本后问题仍存在,在项目的<PropertyGroup>中添加以下配置,跳过对AWSSDK.Core的预编译:

<PublishReadyToRunExclude>AWSSDK.Core</PublishReadyToRunExclude>

部分AWS SDK组件与.NET 8的CrossGen编译流程存在兼容性问题,跳过该组件的预编译可规避此错误。

3. 明确指定目标架构编译

确保编译时的目标架构与部署环境一致(如linux-arm64),避免跨架构编译时的依赖路径问题。执行publish命令时明确指定架构:

dotnet publish -c Release -r linux-arm64

4. 清理缓存与旧构建输出

执行以下命令清理NuGet缓存和旧构建文件,避免残留的旧版本依赖干扰:

dotnet clean
dotnet nuget locals all --clear

原因说明

PublishReadyToRun通过提前将IL编译为机器码优化冷启动性能,但AWS SDK的部分组件在.NET 8的CrossGen交叉编译流程中存在依赖解析bug,尤其是当SDK包版本不一致时,更容易触发加载失败的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:49:49