rebus-org / Rebus.PostgreSql

:bus: PostgreSQL persistence for Rebus
https://mookid.dk/category/rebus
Other
17 stars 19 forks source link

Upgrade to Npgsql 5 for .NET 5.0 support #19

Closed mastersign closed 3 years ago

mastersign commented 3 years ago

I am migrating my application from .NET Core 3.1 to .NET 5.0 and as part of that, I migrate from Npgsql 4 to Npgsql 5 for my data layer. Because Rebus.PostgreSql is build against Npgsql 4, the transport initialization throws the exception below.

I tried to upgrade Npgsql to 5.0.0 in Rebus.PostgreSql and it seems to have no conflicts. The caveat is, that Npgsql essentially drops support for .NET Framework 4.6.1. So I guess the question is, are you willing to provide a Rebus.PostgreSql, which is targeting .NET Standard 2.0, is compatible with .NET 5.0, but drops tested support for .NET Framework 4.6.1?

Unhandled exception. Rebus.Injection.ResolutionException: Could not resolve Rebus.Transport.ITransport with decorator depth 0 - registrations: Rebus.Injection.Injectionist+Handler
 ---> Rebus.Exceptions.RebusApplicationException: Error attempting to initialize SQL transport schema with mesages table [dbo].[transport]
 ---> System.MissingMethodException: Method not found: 'Npgsql.NpgsqlDataReader Npgsql.NpgsqlCommand.ExecuteReader()'.
   at Rebus.PostgreSql.PostgreSqlMagic.GetTableNames(PostgresConnection connection)
   at Rebus.PostgreSql.Transport.PostgreSqlTransport.<CreateSchema>b__27_0() in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\PostgreSql\Transport\PostgresqlTransport.cs:line 275
   at Rebus.Internals.AsyncHelpers.CustomSynchronizationContext.<Run>b__7_0(Object _) in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\Internals\AsyncHelpers.cs:line 64
   at Rebus.Internals.AsyncHelpers.CustomSynchronizationContext.Run() in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\Internals\AsyncHelpers.cs:line 85
   at Rebus.Internals.AsyncHelpers.RunSync(Func`1 task) in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\Internals\AsyncHelpers.cs:line 23
   at Rebus.PostgreSql.Transport.PostgreSqlTransport.CreateSchema() in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\PostgreSql\Transport\PostgresqlTransport.cs:line 271
   at Rebus.PostgreSql.Transport.PostgreSqlTransport.EnsureTableIsCreated() in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\PostgreSql\Transport\PostgresqlTransport.cs:line 261
   --- End of inner exception stack trace ---
   at Rebus.PostgreSql.Transport.PostgreSqlTransport.EnsureTableIsCreated() in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\PostgreSql\Transport\PostgresqlTransport.cs:line 265
   at Rebus.Config.PostgreSqlTransportConfigurationExtensions.<>c__DisplayClass4_0.<Configure>b__0(IResolutionContext context) in F:\repo\projects\ERP4Students\Kursverwaltung\src\Rebus.PostgreSql\Rebus.PostgreSql\Config\PostgreSqlTransportConfigurationExtensions.cs:line 67
   at Rebus.Injection.Injectionist.Resolver`1.InvokeResolver(IResolutionContext context)
   at Rebus.Injection.Injectionist.ResolutionContext.Get[TService]()
   --- End of inner exception stack trace ---
   at Rebus.Injection.Injectionist.ResolutionContext.Get[TService]()
   at Rebus.Config.RebusConfigurer.<>c.<Start>b__13_13(IResolutionContext c)
   at Rebus.Injection.Injectionist.Resolver`1.InvokeResolver(IResolutionContext context)
   at Rebus.Injection.Injectionist.ResolutionContext.Get[TService]()
   at Rebus.Config.RebusConfigurer.<>c__DisplayClass13_0.<Start>b__27(IResolutionContext c)
   at Rebus.Injection.Injectionist.Resolver`1.InvokeResolver(IResolutionContext context)
   at Rebus.Injection.Injectionist.ResolutionContext.Get[TService]()
   at Rebus.Config.RebusConfigurer.<>c__DisplayClass13_0.<Start>b__28(IResolutionContext c)
   at Rebus.Injection.Injectionist.Resolver`1.InvokeResolver(IResolutionContext context)
   at Rebus.Injection.Injectionist.ResolutionContext.Get[TService]()
   at Rebus.Injection.Injectionist.Get[TService]()
   at Rebus.Config.RebusConfigurer.Start()
   at Rebus.Config.DelayedStartupConfigurationExtensions.Create(RebusConfigurer configurer)
   at Rebus.ServiceProvider.ServiceCollectionExtensions.<>c__DisplayClass1_0.<AddRebus>b__4(IServiceProvider provider)
   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.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, 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.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Rebus.ServiceProvider.ServiceCollectionExtensions.<>c.<AddRebus>b__1_6(IServiceProvider provider)
   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.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, 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.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Rebus.ServiceProvider.ServiceCollectionExtensions.<>c.<AddRebus>b__1_7(IServiceProvider provider)
   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.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, 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.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Rebus.ServiceProvider.ServiceProviderExtensions.UseRebus(IServiceProvider provider, Action`1 busAction)
   at Rebus.ServiceProvider.ServiceProviderExtensions.UseRebus(IServiceProvider provider)
mookid8000 commented 3 years ago

are you willing to provide a Rebus.PostgreSql, which is targeting .NET Standard 2.0, is compatible with .NET 5.0, but drops tested support for .NET Framework 4.6.1?

yes 🙂 will you send a PR?

mastersign commented 3 years ago

Send you a PR: https://github.com/rebus-org/Rebus.PostgreSql/pull/20

mookid8000 commented 3 years ago

Fixed by #20 - available on NuGet.org as Rebus.PostgreSql 7.2.0 now 🙂