Dotnet核心3.1 Identityserver缺少Newtonsoft.Json 12.0.0

时间:2020-06-11 08:26:12

标签: .net-core identityserver4

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

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

  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>  

1 个答案:

答案 0 :(得分:2)

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

手动将'Newtonsoft.Json 12.0.0'NuGet软件包安装到项目中可以解决此问题。

如果这不能解决您的问题,请尝试用Newtonsoft.Json替换System.Text.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);

这对我们有用,但这取决于您的项目设置。这里的说明提供了以下解决方案。

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://docs.microsoft.com/en-us/dotnet/core/compatibility/2.2-3.1#authentication-newtonsoftjson-types-replaced