.NET 3.1升级至.NET 6.0导致Jenkins构建Lambda失败求助
.NET 6 Lambda构建失败:MSB3644 引用程序集找不到问题排查与解决
问题背景
- 部署环境:Linux Jenkins服务器,用于部署Lambda函数及OAuth服务器
- 版本升级:因.NET 3.1停止支持,将代码库升级至.NET 6.0,Jenkins已安装6.0.412版本SDK
- 异常现象:原.NET 3.1项目构建正常,但首个.NET 6版本的Lambda构建失败
- 构建工具:Jenkins流水线使用SAM CLI工具构建并发布.NET代码
核心报错
microsoft.common.currentversion.targets(1220,5): error msb3644: the reference assemblies for .netplatform,version=v6.0 were not found. to resolve this, install the developer pack (sdk/targeting pack) for this framework version or retarget your application...
已通过dotnet --list-sdk确认服务器已安装6.0.412版本SDK。
初期排查方向
查看构建失败涉及的microsoft.common.currentversion.targets片段:
<!-- By default if there is no root path set then the task will assume it is Program Files\Reference Assemblies\Microsoft\Framework--> <GetReferenceAssemblyPaths Condition="'$(TargetFrameworkMoniker)' != '' and ('$(_TargetFrameworkDirectories)' == '' or '$(_FullFrameworkReferenceAssemblyPaths)' == '')" TargetFrameworkMoniker="$(TargetFrameworkMoniker)" RootPath="$(TargetFrameworkRootPath)" TargetFrameworkFallbackSearchPaths="$(TargetFrameworkFallbackSearchPaths)" BypassFrameworkInstallChecks="$(BypassFrameworkInstallChecks)" > <Output TaskParameter="ReferenceAssemblyPaths" PropertyName="_TargetFrameworkDirectories"/> <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="_FullFrameworkReferenceAssemblyPaths"/> <Output TaskParameter="TargetFrameworkMonikerDisplayName" PropertyName="TargetFrameworkMonikerDisplayName" Condition="'$(TargetFrameworkMonikerDisplayName)' == ''"/> </GetReferenceAssemblyPaths>
曾怀疑Linux环境下构建任务错误查找Windows风格的Program Files路径,考虑是否需要显式指定引用程序集路径。
最终解决方案
.NET 6.0对运行时与目标框架的命名做了分离:
- .NET 3.1时期,运行时和目标框架的标识均为
netcoreapp3.1 - .NET 6.0时期,目标框架标识为
net6.0,运行时标识为dotnet6
此前配置中错误地将目标框架也写成了dotnet6,修正为net6.0后,构建成功。
内容的提问来源于stack exchange,提问作者TwelveGates
相关产品推荐
相关产品推荐

