.NETCore App 6 compatible

Is the .NET SDK compatible with .NETCore 6 applications? We are currently running a ASPNet Core application, using the latest NET6 version (RC2), with the setup code as shown below.
Using the Couchbase.Extensions.DependencyInjection version 3.1.6 it works perfectly fine, as soon as this one is updated to 3.2, the application cannot access the bucket anymore with the following error message:

fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
      System.TypeInitializationException: The type initializer for 'Couchbase.Extensions.DependencyInjection.Internal.NamedBucketProxyGenerator' threw an exception.
       ---> System.PlatformNotSupportedException: Strong-name signing is not supported on this platform.
         at System.Reflection.StrongNameKeyPair..ctor(Byte[] keyPairArray)
         at Couchbase.Extensions.DependencyInjection.Internal.NamedBucketProxyGenerator..cctor()
         --- End of inner exception stack trace ---
         at Couchbase.Extensions.DependencyInjection.Internal.NamedBucketProxyGenerator.CreateProxyType(Type interfaceType)
         at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
         at Couchbase.Extensions.DependencyInjection.Internal.NamedBucketProxyGenerator.GetProxy[T](IBucketProvider bucketProvider, String bucketName)
         at Couchbase.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c__DisplayClass2_0`1.<AddCouchbaseBucket>b__0(IServiceProvider serviceProvider)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
         at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
         at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
         at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
         at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
         at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
         at lambda_method12(Closure , IServiceProvider , Object[] )
         at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass7_0.<CreateActivator>b__0(ControllerContext controllerContext)
         at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass6_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
      --- End of stack trace from previous location ---
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
         at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
         at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
         at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
         at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
         at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Upgrading the CouchbaseNetClient package is fine, this only is a problem with the DI package.
I found the following info in relation to the error received:

Setup code:

// couchbaseConfiguration is a configuration object passed 
services.AddCouchbase(couchbaseConfiguration);
services.AddCouchbaseBucket<IApplicationBucketProvider>(couchbaseConfiguration.GetValue<string>("Buckets:0"));

Hi @avia_tm we currently dont support .NET 6 but are working towards it. However we do support .NET 5.0 at present

Thanks for the information! I’ll make an internal note on our codebase why we keep the DI package back on 3.1.6 and keep an eye on the future releases.

@avia_tm -

What I don’t understand is that if 3.1.6 works then 3.2.X should also work? (see below).

Jeff

@avia_tm -

It looks like this was introduced in the 3.2.0 Couchbase Dependency Injection release. I created a ticket for tracking and made it a blocker for .NET 6.0 integration.

Jeff

3 Likes

@jmorris - any update on this one? Would a temporary solution be possible by building the project ourselves targeting .NET 6? Our migration is currently blocked on this.

@weezelboy -

There has been some progress made torwards .NET 6 support:

If you go this route then I would use the head of the master branch on github. Also, if you could contribute by pushing any changes as pull requests or reporting any issues, that would be very helpful!

Jeff

@weezelboy

Based on my testing, the current head of the master branch is .NET 6 compatible and should work for you if you build from source. Alternatively, I believe the 3.2.5 release is coming soon and will contain all of the fixes.

That said, if you find any other incompatibilities let me know. I’m happy to help, my company will be moving to .NET 6 very soon.