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

.NET 8降级至.NET 6后Azure.Identity.ClientSecretCredential认证报错

.NET 6.0迁移后Azure Identity认证报错问题

我原本在.NET 8.0环境开发了一款调用MS Graph API获取邮件的应用,运行正常。因需求限制降级到.NET 6.0,重构代码后程序能启动,但Azure Identity认证环节报错:

An error occurred in Run: ClientSecretCredential authentication failed: Method not found: 'Void System.Text.Json.Serialization.Metadata.JsonObjectInfoValues1.set_ObjectCreator(System.Func1<!0>)'

我的ConfigurationService代码如下:

public abstract class TcConfigurationServices
{
    private static readonly string[] sScopes = { "https://graph.microsoft.com/.default" };

    public static void ConfigureServices(IServiceCollection tServices, IConfiguration tConfiguration)
    {
        // Bind configuration sections to POCO classes
        tServices.Configure<TcJiraOptions>(tConfiguration.GetSection("Jira"));
        tServices.Configure<TcAzureAdOptions>(tConfiguration.GetSection("AzureAd"));
        
        //Console.WriteLine(tConfiguration.GetValue<string?>("Jira:ProjectKey"));
        
        // Add HttpClient for TcJiraService
        tServices.AddHttpClient<TcJiraService>();

        // Register GraphServiceClient with a factory method
        tServices.AddSingleton<GraphServiceClient>(tServiceProvider =>
        {
            var aAzureOptions = tServiceProvider.GetRequiredService<IOptions<TcAzureAdOptions>>().Value;
            var aClientSecretCredential = new ClientSecretCredential(
                aAzureOptions.TenantId,
                aAzureOptions.ClientId,
                aAzureOptions.ClientSecret);

            // Create an instance of GraphServiceClient with the ClientSecretCredential
            var aGraphServiceClient = new GraphServiceClient(aClientSecretCredential, sScopes);

            return aGraphServiceClient;
        });

        tServices.AddSingleton<TcMailService>();

        // Add logging services
        tServices.AddLogging(tLoggingBuilder =>
        {
            tLoggingBuilder.ClearProviders(); // Clear existing providers
            tLoggingBuilder.SetMinimumLevel(LogLevel.Trace); // Set the minimum log level to Trace
            tLoggingBuilder.AddNLog(); // Add NLog as the logging provider
            tLoggingBuilder.AddConsole(); // Add console logging
            tLoggingBuilder.AddDebug(); // Add debug logging
        });

        // Register the main application class
        tServices.AddTransient<TcApp>();

        tServices.AddSingleton(tResolver =>
            tResolver.GetRequiredService<IOptions<TcJiraOptions>>().Value);
        tServices.AddSingleton(tResolver =>
            tResolver.GetRequiredService<IOptions<TcAzureAdOptions>>().Value);
    }
}

项目依赖配置:

<ItemGroup>
        <PackageReference Include="Azure.Core" Version="1.38.0" />
        <PackageReference Include="Azure.Identity" Version="1.10.4" />
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="8.0.0" />
        <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.0" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
        <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
        <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0-preview.2.24128.5" />
        <PackageReference Include="Microsoft.Graph" Version="5.45.0" />
        <PackageReference Include="Microsoft.Graph.Core" Version="3.1.9" />
        <None Update="appsettings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
        <Content Include="Templates\*.txt">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
        <None Remove="nlog.config" />
        <Content Include="nlog.config">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
    </ItemGroup>

我怀疑是认证依赖包不兼容,会不会是System.Text.Json的问题?


解决方案

问题根源是依赖包版本与.NET 6.0完全不匹配:

  1. 你混用了.NET 8.0、9.0预览版的Microsoft.Extensions系列包,这些包依赖的System.Text.Json版本远高于.NET 6.0内置版本,直接导致方法找不到的兼容性错误。
  2. Azure.Identity和Microsoft.Graph的版本也过高,它们依赖的框架API在.NET 6.0中不存在。

修复步骤:

  • 把所有Microsoft.Extensions相关包(Configuration、DependencyInjection、Options等)统一降级到6.0.x系列稳定版(比如6.0.26),确保和.NET 6.0框架版本对齐。
  • 调整Azure.Identity到兼容.NET 6.0的稳定版本(比如1.10.0,可通过NuGet页面确认兼容范围)。
  • Microsoft.Graph降级到5.x中明确支持.NET 6.0的版本(比如5.37.0),避免最新版本引入高版本依赖。
  • 清理NuGet缓存,重新还原依赖,确保所有包版本一致且适配.NET 6.0。

参考修改后的依赖配置(关键部分):

<ItemGroup>
    <PackageReference Include="Azure.Core" Version="1.32.0" /> <!-- 适配.NET 6.0的稳定版 -->
    <PackageReference Include="Azure.Identity" Version="1.10.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.26" />
    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.26" />
    <PackageReference Include="Microsoft.Graph" Version="5.37.0" />
    <PackageReference Include="Microsoft.Graph.Core" Version="3.1.6" /> <!-- 适配Microsoft.Graph 5.37.0的版本 -->
    <!-- 其他包保持兼容版本即可 -->
</ItemGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:34:56