.NET 6 Azure Function替换PnP.Core.Services为CSOM的方法及兼容性咨询
一、CSOM对.NET 6的支持情况
SharePoint Online CSOM的官方NuGet包(Microsoft.SharePointOnline.CSOM)完全支持.NET 6,建议使用16.0.24121.12000及以上的稳定版本,直接通过NuGet安装即可。
二、代码替换示例
以下是对应原有三个文件的CSOM改造代码:
1. AzureFunctionSettings.cs
配置类无需大幅修改,保持原有配置项结构即可:
public class AzureFunctionSettings { public string SharePointSiteUrl { get; set; } public string SharePointClientId { get; set; } public string SharePointClientSecret { get; set; } }
2. Startup.cs
替换PnP服务注册逻辑,改为注册SharePoint ClientContext实例:
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.SharePoint.Client; using System; [assembly: FunctionsStartup(typeof(YourNamespace.Startup))] namespace YourNamespace { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { // 绑定配置参数 var config = builder.GetContext().Configuration; var settings = config.GetSection(nameof(AzureFunctionSettings)).Get<AzureFunctionSettings>(); builder.Services.AddSingleton(settings); // 注册Scoped的ClientContext,每次请求创建一个实例 builder.Services.AddScoped(sp => { var ctx = new ClientContext(settings.SharePointSiteUrl); // 应用权限认证(ClientId + ClientSecret) var secureSecret = new System.Security.SecureString(); foreach (char c in settings.SharePointClientSecret) { secureSecret.AppendChar(c); } ctx.Credentials = new SharePointOnlineCredentials(settings.SharePointClientId, secureSecret); // 设置请求超时(可选) ctx.RequestTimeout = TimeSpan.FromMinutes(5); return ctx; }); } } }
3. Function1.cs
替换PnP的列表项创建逻辑,改用CSOM原生API:
using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; using Microsoft.SharePoint.Client; using System.Threading.Tasks; namespace YourNamespace { public class Function1 { private readonly AzureFunctionSettings _settings; private readonly ClientContext _clientContext; // 构造函数注入依赖 public Function1(AzureFunctionSettings settings, ClientContext clientContext) { _settings = settings; _clientContext = clientContext; } [FunctionName("Function1")] public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {System.DateTime.Now}"); try { // 获取目标列表(替换为你的列表名称) var targetList = _clientContext.Web.Lists.GetByTitle("TestList"); // 创建新列表项 var itemCreateInfo = new ListItemCreationInformation(); var newListItem = targetList.AddItem(itemCreateInfo); // 设置字段值(替换为你的实际字段名称和内容) newListItem["Title"] = "CSOM创建的新项"; newListItem["Description"] = ".NET 6 Azure Function通过CSOM提交"; // 提交更改到SharePoint newListItem.Update(); await _clientContext.ExecuteQueryAsync(); log.LogInformation($"成功创建列表项,ID: {newListItem.Id}"); } catch (System.Exception ex) { log.LogError(ex, "创建SharePoint列表项失败"); throw; } } } }
三、关键注意事项
- 安装依赖:必须安装
Microsoft.SharePointOnline.CSOMNuGet包,可通过包管理器或命令行Install-Package Microsoft.SharePointOnline.CSOM完成 - 权限配置:确保ClientId对应的Azure AD应用拥有目标SharePoint站点/列表的写入权限(可通过站点权限管理添加应用主体)
- 认证扩展:如果需要使用用户上下文认证,可替换为OAuth令牌方式,但Azure Function场景下应用权限更适合无交互执行
- 性能优化:CSOM的
ExecuteQueryAsync是批量提交请求,尽量合并多个操作后再调用,避免频繁请求
内容的提问来源于stack exchange,提问作者John John
相关产品推荐
相关产品推荐

