调用Microsoft Graph API时出现set_Method方法缺失报错如何解决
问题原因
该报错为Microsoft Graph SDK依赖包版本不兼容导致,核心触发逻辑如下:
- 代码中使用的
DelegateAuthenticationProvider属于已废弃的Microsoft.Graph.Auth包,仅适配v3及以下版本的Microsoft Graph SDK,与高版本Graph主包、Microsoft.Graph.Core包的API定义不匹配 - 不同版本的
Microsoft.Graph和Microsoft.Graph.Core包底层BaseRequest类的Method属性定义存在差异,旧版本包含公共setter方法,新版本已修改该属性的访问性或完全移除该定义,运行时加载的程序集版本与编译时引用版本不一致时,就会抛出方法找不到的异常 - 项目同时引用的SharePoint客户端组件也可能传递引用了不同版本的Graph相关依赖,进一步加剧版本冲突
解决方案
方案1:统一依赖版本(兼容现有代码写法)
- 卸载项目中所有Microsoft Graph相关包,包括
Microsoft.Graph、Microsoft.Graph.Core、Microsoft.Graph.Auth - 统一安装匹配的v4.x稳定版本,推荐版本组合:
Microsoft.Graph4.54.0Microsoft.Graph.Core2.0.15
- 清理项目bin、obj文件夹,重新编译运行即可
方案2:升级到v5+版本Graph SDK(推荐)
v5+版本已完全移除Request()方法,身份认证改用Azure.Identity包实现,代码调整如下:
- 安装最新稳定版
Microsoft.Graph、Azure.Identity包 - 调整
GetGraphServiceClient方法实现:
using Azure.Identity; using Microsoft.Graph; public GraphServiceClient GetGraphServiceClient() { var scopes = new[] { "https://graph.microsoft.com/.default" }; var options = new ClientSecretCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzurePublicCloud }; // 对应你原先的认证逻辑,此处以客户端凭证流为例,可按需替换为其他认证流 var clientSecretCredential = new ClientSecretCredential( "租户ID", "客户端ID", "客户端密钥", options); return new GraphServiceClient(clientSecretCredential, scopes); }
- 调整获取用户的代码:
public async Task<IList<User>> GetUsers() { GraphServiceClient graphClient = GetGraphServiceClient(); var users = await graphClient.Users.GetAsync(); return users.Value; }
额外排查项
如果调整版本后仍报错,检查项目的packages.config(.NET Framework项目)或.csproj文件,删除冗余的多版本Graph包引用即可。
内容的提问来源于stack exchange,提问作者sujith karivelil
相关产品推荐
相关产品推荐

