使用C#调用AWS Lambda遇平台不支持异常求助(SharePoint CSOM场景)
这个问题我之前帮同事排查过,核心原因其实很直接:你现在引用的Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll是仅适配Windows平台的传统.NET Framework版本,而AWS Lambda默认运行在Linux环境中,两者的平台依赖不兼容,自然就抛出了这个异常。下面是具体的解决步骤:
1. 替换为跨平台的SharePoint CSOM NuGet包
微软早就推出了支持.NET Core/.NET 5+的跨平台CSOM包,完美适配Linux环境。你需要:
- 先移除项目里手动添加的那两个Windows专属DLL引用
- 打开NuGet包管理器,安装
Microsoft.SharePointOnline.CSOM(注意是带Online标识的这个包,它整合了所有跨平台所需的组件)
2. 确认AWS Lambda运行时配置
- 确保你的Lambda函数选择的是
.NET 6或.NET 8这类支持跨平台的运行时,别选传统的.NET Framework运行时(除非你特意需要Windows环境的Lambda,但跨平台方案更灵活成本也更低) - 如果确实要用到Windows环境的Lambda,创建函数时需选择
Windows操作系统,并对应匹配.NET Framework运行时,但这种场景很少见
3. 代码适配(几乎无需改动)
跨平台CSOM包的API和传统版本基本一致,你的创建列表代码可以直接复用,比如:
using Microsoft.SharePoint.Client; var siteUrl = "https://your-sharepoint-site.sharepoint.com"; var userName = "your-account@domain.com"; var password = "your-password"; using (var context = new ClientContext(siteUrl)) { var securePassword = new System.Security.SecureString(); foreach (char c in password) securePassword.AppendChar(c); context.Credentials = new SharePointOnlineCredentials(userName, securePassword); // 创建自定义列表的逻辑 var listCreationInfo = new ListCreationInformation { Title = "业务数据列表", TemplateType = (int)ListTemplateType.GenericList }; var newList = context.Web.Lists.Add(listCreationInfo); context.Load(newList); context.ExecuteQuery(); }
4. 部署包关键注意事项
- 发布到Lambda时,一定要选择
Linux作为目标运行时(Visual Studio发布向导里可以设置) - 不要手动添加任何Windows特定的依赖文件,NuGet会自动打包适配Linux的组件
额外排查点
如果本地Windows测试正常,但部署到Lambda后仍报错,大概率是部署包里混入了Windows版本的依赖,建议先清理项目的bin/obj目录,再重新编译发布。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

