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

IAuthenticationProvider引用报错:声称定义于Microsoft.Graph.Core却未找到

解决CS7069: 对类型“IAuthenticationProvider”的引用声称定义于“Microsoft.Graph.Core”中但未找到的问题

问题根源

  • Microsoft.Graph 5.x系列已彻底重构认证体系,不再支持IAuthenticationProvider接口。
  • 你使用的Microsoft.Graph.Auth 1.0.0-preview.7是针对旧版Graph SDK(v3/v4)的预览库,与v5.x完全不兼容,同时项目中Microsoft.Graph.Core 3.0.8也和v5.x的核心组件冲突,导致类型找不到。

解决方案步骤

1. 移除不兼容的NuGet包

修改项目文件,删除以下冲突包引用:

<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
<PackageReference Include="Microsoft.Graph.Core" Version="3.0.8" />

注:Microsoft.Graph 5.x已内置核心功能,无需单独引用Core包;Microsoft.Graph.Auth已被官方废弃。

2. 使用新版认证方式(TokenCredential)

Microsoft.Graph 5.x基于TokenCredential(来自Azure.Identity或Microsoft.Identity.Web)实现认证,以下是两种可行的代码修正方案:

方案一:结合Microsoft.Identity.Web(已在你的项目中引用)
using Microsoft.Graph;
using Microsoft.Identity.Client;
using System;
using System.Threading.Tasks;

namespace SharePointSearch
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // 配置参数
            string clientId = "<your-client-id>";
            string clientSecret = "<your-client-secret>";
            string tenantId = "<your-tenant-id>";
            string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

            // 创建机密客户端应用并获取令牌
            var confidentialClient = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithTenantId(tenantId)
                .WithClientSecret(clientSecret)
                .Build();

            var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync();

            // 构建GraphServiceClient
            var graphClient = new GraphServiceClient(
                new DelegateAuthenticationProvider(async (requestMessage) =>
                {
                    requestMessage.Headers.Authorization = 
                        new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
                })
            );

            // 示例调用:获取当前应用权限下的站点列表
            var sites = await graphClient.Sites.GetAsync();
            Console.WriteLine($"共找到 {sites.Value.Count} 个站点");
        }
    }
}
方案二:使用Azure.Identity(推荐更简洁的实现)

先添加Azure.Identity包引用到项目文件:

<PackageReference Include="Azure.Identity" Version="1.10.4" />

然后修改代码:

using Microsoft.Graph;
using Azure.Identity;
using System;
using System.Threading.Tasks;

namespace SharePointSearch
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string clientId = "<your-client-id>";
            string clientSecret = "<your-client-secret>";
            string tenantId = "<your-tenant-id>";

            // 创建ClientSecretCredential
            var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

            // 直接传入凭证和作用域构建GraphServiceClient
            var graphClient = new GraphServiceClient(credential, new[] { "https://graph.microsoft.com/.default" });

            // 示例调用
            var me = await graphClient.Me.GetAsync();
            Console.WriteLine($"当前用户:{me.DisplayName}");
        }
    }
}

3. 清理并重建项目

执行以下命令确保依赖完全更新:

dotnet clean
dotnet restore
dotnet build

关键注意事项

  • Microsoft.Graph 5.x不再兼容任何基于IAuthenticationProvider的旧认证组件
  • 官方已废弃Microsoft.Graph.Auth,推荐使用Azure.Identity或Microsoft.Identity.Web处理认证
  • 确保所有NuGet包版本匹配,避免跨大版本引用冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:03:29