Dotnet core 3.1 Identityserver Missing Newtonsoft.Json 12.0.



我在尝试在我的dotnet core 3.1应用程序中运行Identityserver4时遇到问题

我遵循了身份服务器的基本配置指南,并将其写入启动文件中的配置服务方法。

services.AddIdentityServer((x) =>
{
x.PublicOrigin = Environment.GetEnvironmentVariable("baseUrl");
})
.AddInMemoryApiResources(Config.Apis())
.AddDeveloperSigningCredential()
.AddCorsPolicyService<CorsPolicyProvider>()
.AddInMemoryClients(Config.Clients)
.AddExtensionGrantValidator<AzureLoginGrant>()
.AddProfileService<ExtendedProfileService>();

从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

知道是什么原因吗?

从每个包运行最新版本。 .csproj

<ItemGroup>
<PackageReference Include="IdentityServer4" Version="3.1.2" />
<PackageReference Include="MediatR" Version="8.0.1" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.4" />
<PackageReference Include="Serilog" Version="2.9.0" />
<PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
</ItemGroup>  

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包:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

然后使用以下方法更新您的 Starup.cs。

services
.AddControllers()
.AddNewtonsoftJson(x => x.SerializerSettings.Converters.Add(new StringEnumConverter())).AddControllersAsServices().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

这对我们有用,但这取决于您的项目设置。此处的说明给出了以下解决方案。

https://dotnetcoretutorials.com/2019/12/19/using-newtonsoft-json-in-net-core-3-projects/

services.AddMvc().AddNewtonsoftJson();
services.AddControllers().AddNewtonsoftJson();
services.AddControllersWithViews().AddNewtonsoftJson();
services.AddRazorPages().AddNewtonsoftJson();

https://learn.microsoft.com/en-us/dotnet/core/compatibility/2.2-3.1#authentication-newtonsoftjson-types-replaced

相关内容