.NET 7 Blocker - Method get_ServerSideSessions in type ApiAuthorizationDbContext from assembly IdentityServer does not have an implementation
See original GitHub issueIs there an existing issue for this?
- I have searched the existing issues
Describe the bug
When trying to build .Net 7 (Angular and WebAPI )application we are getting
`13>Method “get_ServerSideSessions” in type “Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ApiAuthorizationDbContext"1” from assembly “Microsoft.AspNetCore.ApiAuthorization.IdentityServer, Version=7.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60” does not have an implementation.)
13> —> System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. 13>Method “get_ServerSideSessions” in type “Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ApiAuthorizationDbContext"1” from assembly “Microsoft.AspNetCore.ApiAuthorization.IdentityServer, Version=7.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60” does not have an implementation.
13> at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) 13> at Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(IEnumerable"1 parts, ControllerFeature feature) 13> at Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature[TFeature](TFeature feature) 13> at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.GetControllerTypes() 13> at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.GetDescriptors() 13> at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context) 13> at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.UpdateCollection() 13> at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.Initialize() 13> at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.GetChangeToken() 13> at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func"1 changeTokenProducer, Action changeTokenConsumer) 13> at Microsoft.AspNetCore.Mvc.Routing.ActionEndpointDataSourceBase.Subscribe() 13> at Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.GetOrCreateDataSource(IEndpointRouteBuilder endpoints) 13> at Microsoft.AspNetCore.Builder.ControllerEndpointRouteBuilderExtensions.MapControllerRoute(IEndpointRouteBuilder endpoints, String name, String pattern, Object defaults, Object constraints, Object dataTokens) 13> at HomePlanner.Server.Application.Program.Main(String[] args) in D:\PROJEKTY\HomePlanner\HomePlanner.Server\HomePlanner.Server.Application\Program.cs:line 57 13> at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) 13> at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr) 13>System.TypeLoadException: Method “get_ServerSideSessions” in type “Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ApiAuthorizationDbContext"1” from assembly “Microsoft.AspNetCore.ApiAuthorization.IdentityServer, Version=7.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60” does not have an implementation. 13> — End of inner exception stack trace — 13> at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 13> at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 13> at System.Threading.Tasks.Task.Wait() 13> at NSwag.Commands.ServiceProviderResolver.GetServiceProviderWithHostFactoryResolver(Assembly assembly) in //src/NSwag.Commands/HostApplication.cs:line 158 13> at NSwag.Commands.ServiceProviderResolver.GetServiceProvider(Assembly assembly) in //src/NSwag.Commands/HostApplication.cs:line 70 13> at NSwag.Commands.Generation.AspNetCore.AspNetCoreToOpenApiGeneratorCommandEntryPoint.Process(String commandContent, String outputFile, String applicationName) in //src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiGeneratorCommandEntryPoint.cs:line 27 13> at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) 13> at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr) 13> — End of inner exception stack trace — 13> at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr) 13> at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 13> at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 13> at NSwag.AspNetCore.Launcher.Program.Main(String[] args) in //src/NSwag.AspNetCore.Launcher/Program.cs:line 132 13>System.InvalidOperationException: Swagger generation failed with non-zero exit code “1”. 13> at NSwag.Commands.Generation.AspNetCore.AspNetCoreToSwaggerCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in //src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs:line 231 13> at NSwag.Commands.NSwagDocumentBase.GenerateSwaggerDocumentAsync() in //src/NSwag.Commands/NSwagDocumentBase.cs:line 275 13> at NSwag.Commands.NSwagDocument.ExecuteAsync() in //src/NSwag.Commands/NSwagDocument.cs:line 81 13> at NSwag.Commands.Document.ExecuteDocumentCommand.ExecuteDocumentAsync(IConsoleHost host, String filePath) in //src/NSwag.Commands/Commands/Document/ExecuteDocumentCommand.cs:line 85 13> at NSwag.Commands.Document.ExecuteDocumentCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in //src/NSwag.Commands/Commands/Document/ExecuteDocumentCommand.cs:line 39 13> at NConsole.CommandLineProcessor.ProcessSingleAsync(String[] args, Object input) 13> at NConsole.CommandLineProcessor.ProcessAsync(String[] args, Object input) 13> at NSwag.Commands.NSwagCommandProcessor.ProcessAsync(String[] args) in //src/NSwag.Commands/NSwagCommandProcessor.cs:line 61`
We are using the latest versions of the packages (there is nothing to update)
<PackageReference Include="AutoMapper" Version="12.0.0" />
<PackageReference Include="AutoMapper.Collection" Version="9.0.0" />
<PackageReference Include="AutoMapper.Collection.EntityFrameworkCore" Version="9.0.0" />
<PackageReference Include="AutoMapper.Extensions.ExpressionMapping" Version="6.0.2" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />
<PackageReference Include="Duende.IdentityServer" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.AspNetIdentity" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.EntityFramework" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.Storage" Version="6.2.0" />
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.4.0" />
<PackageReference Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="7.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="7.0.2" />
<PackageReference Include="Microsoft.AspNetCore.SpaProxy" Version="7.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.2"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
...
We created this issue because previous one was not updated in laset two months (#44990 and its PR !45145)
Current state of Microsoft.AspNetCore.ApiAuthorization.IdentityServer package is blocking upgrade to .Net 7 IdentityServer 6.2
As was pointed out .Net 7 needs AutoMapper 12 (1), newest IndentityServer (6.2.0) also has supports .Net 7 and uses AutoMapper 12 but at the same time they added that ServerSideSessions DbSet (2) which is not present in ApiAuthorizationDbContext of Microsoft.AspNetCore.ApiAuthorization.IdentityServer 7.0.0 (3)
I have tried to lower the versions of Duende.IdentityServer to 6.0.4 which is last version without ServerSideSessions but then I have to lower version of AutoMapper to 11 and that results in error (“violates the constraint of type parameter ‘T’” (1)).
- https://github.com/AutoMapper/AutoMapper/issues/3988 https://github.com/dotnet/runtime/issues/69119
- https://docs.duendesoftware.com/identityserver/v6/data/operational/sessions/
- https://github.com/dotnet/aspnetcore/pull/45145
Expected Behavior
Application should build. Method get_ServerSideSessions in type ApiAuthorizationDbContext from assembly IdentityServer does not have an implementation error should disappear
Steps To Reproduce
Create application that uses Duende.IdentityServer (and related) 6.2.0 Microsoft.AspNetCore.ApiAuthorization.IdentityServer (and related) 7.0.2 AutoMapper (and related) 12.0.0
Exceptions (if any)
No response
.NET Version
7.0
Anything else?
No response
Issue Analytics
- State:
- Created 8 months ago
- Reactions:1
- Comments:6 (5 by maintainers)
@Alan468 thanks for contacting us.
Thanks for bringing this up to our attention. It fell out of our radar likely due to the holidays.
I took another chance to look at this and better understand what is going on, so here is a more detailed explanation of what is happening.
ASP.NET Core 7.0 depends on Identity Server 6.0.4.
Identity Server 6.1.0 introduces a breaking change in their APIs by adding an extra property to an interface
IPersistedGrantDbContext
.When upgrading IdentityServer explicitly to the latest version, this breaks our package, since it is compiled against 6.0.4 and does not contain the new interface member.
For reference here are the two versions of the interface:
Our templates work out of the box since they target 6.0.4, the problem apears when people try to update to a newer version of Identity Server explicitly:
There is a way to make it work with the following steps:
The breaking change is located in
Duende.IdentityServer.EntityFramework.Storage
.Unfortunately, I do not think we can’t do anything about this out of the box, since we can’t change the public API in patch releases, but I am asking if there is an exception that can be made.
I would suggest in parallel raising this issue with the Identity Server team, as they might have a way to revert the breaking change in a future release and delay it until a major version. That would make future versions compatible with our package again.
Thank you @javiercn for quick response - I can also confirm that this workaround works and application starts correctly. As per seperate ticket for Duende Identity Server - I have created it for more info on the topic (https://github.com/DuendeSoftware/Support/issues/445)