尝试在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>
答案 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();