.net core Dotnet core 3.1 Identityserver缺少Newtonsoft.Json 12.0.0

.net core Dotnet core 3.1 Identityserver缺少Newtonsoft.Json 12.0.0,.net-core,identityserver4,.net Core,Identityserver4,我试图在dotnet core 3.1应用程序中运行IdentityServer 4时遇到问题 我遵循Identityserver的基本配置指南,并将其写入启动文件中的configureService方法 services.AddIdentityServer((x) => { x.PublicOrigin = Environment.GetEnvironmentVariable("baseUrl"); })

我试图在dotnet core 3.1应用程序中运行IdentityServer 4时遇到问题

我遵循Identityserver的基本配置指南,并将其写入启动文件中的configureService方法

  services.AddIdentityServer((x) =>
         {
             x.PublicOrigin = Environment.GetEnvironmentVariable("baseUrl");
         })
         .AddInMemoryApiResources(Config.Apis())
         .AddDeveloperSigningCredential()
         .AddCorsPolicyService<CorsPolicyProvider>()
         .AddInMemoryClients(Config.Clients)
         .AddExtensionGrantValidator<AzureLoginGrant>()
         .AddProfileService<ExtendedProfileService>();
services.AddIdentityServer((x)=>
{
x、 PublicOrigin=Environment.GetEnvironmentVariable(“baseUrl”);
})
.AddInMemoryApiResources(Config.api())
.AddDeveloperSigningCredential()
.AddCorsPolicyService()
.AddInMemoryClients(Config.Clients)
.AddExtensionGrantValidator()
.AddProfileService();
从VS本地运行此应用程序完全没有问题。但是,当我从应用程序构建容器映像并尝试运行它时,它甚至没有启动。 正在获取此错误消息

Unhandled exception. System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
   at Microsoft.Extensions.DependencyInjection.IdentityServerBuilderExtensionsCrypto.AddDeveloperSigningCredential(IIdentityServerBuilder builder, Boolean persistKey, String filename, RsaSigningAlgorithm signingAlgorithm)
   at infradev_auth_service.Startup.ConfigureServices(IServiceCollection services) in /src/infradev-auth-service/Startup.cs:line 63
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(Object instance, IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.<>c__DisplayClass9_0.<Invoke>g__Startup|0(IServiceCollection serviceCollection)
   at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.Invoke(Object instance, IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.<>c__DisplayClass8_0.<Build>b__0(IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass12_0.<UseStartup>b__0(HostBuilderContext context, IServiceCollection services)
   at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at infradev_auth_service.Program.Main(String[] args) in /src/infradev-auth-service/Program.cs:line 27
未处理的异常。System.IO.FileLoadException:无法加载文件或程序集“Newtonsoft.Json,版本=12.0.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”。定位的程序集清单定义与程序集引用不匹配。(0x8013100)
文件名:“Newtonsoft.Json,版本=12.0.0.0,区域性=中性,PublicKeyToken=30ad4fe6b2a6aeed”
在Microsoft.Extensions.DependencyInjection.IdentityServerBuilderExtensionsCrypto.AddDeveloperSigningCredential(IIIdentityServerBuilder生成器,布尔持久键,字符串文件名,RsaSigningAlgorithm signingAlgorithm)
在/src/infradev auth service/Startup.cs中的infradev_auth_service.Startup.ConfigureServices(IServiceCollection服务)中:第63行
在System.RuntimeMethodHandle.InvokeMethod(对象目标、对象[]参数、签名符号、布尔构造函数、布尔WrapeExceptions)
在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性)
位于Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(对象实例,IServiceCollection服务)
在Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.c_uuDisplayClass9_0.g_uStartup | 0(IServiceCollection serviceCollection)
位于Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.Invoke(对象实例,IServiceCollection服务)
在Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.c__DisplayClass8_0.b__0(iSeries收集服务)上
在Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(键入startupType、HostBuilderContext上下文、IServiceCollection服务)
在Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.c__DisplayClass12_0.b__0(HostBuilderContext上下文,IServiceCollection服务)
在Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()上
在Microsoft.Extensions.Hosting.HostBuilder.Build()上
在/src/infradev auth service/Program.cs中的infradev_auth_service.Program.Main(字符串[]args)处:第27行
你知道原因是什么吗

运行每个包的最新版本。 csproj先生


Newtonsoft.Json 12.0.0已在ASP.NET Core 3.1中删除,并替换为System.Text.Json。这可能会引起头痛

将“Newtonsoft.Json 12.0.0”NuGet包手动安装到项目中应该可以解决此问题

如果这不能解决您的问题,请尝试将System.Text.Json替换为Newtonsoft.Json,作为项目默认的Json服务

为此,请使用以下步骤

所以如果你和我在同一条船上,只需要从门上拿些东西。您首先需要安装以下Nuget软件包:

安装软件包Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后使用以下命令更新Starup.cs

services
        .AddControllers()
        .AddNewtonsoftJson(x => x.SerializerSettings.Converters.Add(new StringEnumConverter())).AddControllersAsServices().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
这为我们工作,但它取决于您的项目设置。这里的说明给出了以下解决方案


手动安装的问题是,根据nuget的说法,从newtonsoft.json开始,没有12.0.0:DGood的东西,json服务中的切换也让我头疼:)
services
        .AddControllers()
        .AddNewtonsoftJson(x => x.SerializerSettings.Converters.Add(new StringEnumConverter())).AddControllersAsServices().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddMvc().AddNewtonsoftJson();
services.AddControllers().AddNewtonsoftJson();
services.AddControllersWithViews().AddNewtonsoftJson();
services.AddRazorPages().AddNewtonsoftJson();