.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.JsonObjectInfoValues
1.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完全不匹配:
- 你混用了.NET 8.0、9.0预览版的Microsoft.Extensions系列包,这些包依赖的
System.Text.Json版本远高于.NET 6.0内置版本,直接导致方法找不到的兼容性错误。 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
相关产品推荐
相关产品推荐

