C# 在同一项目中,两个库需要第三个库的两个不同版本

C# 在同一项目中,两个库需要第三个库的两个不同版本,c#,azureservicebus,rebus,signalr-backplane,C#,Azureservicebus,Rebus,Signalr Backplane,在一个C#项目中,我需要为用Azure服务总线实现的信号器制作一个背板。因此,在初创公司中,我写道: GlobalHost.DependencyResolver.UseServiceBus(asb_endpoint, topic); 在同一个项目中,甚至还有Azure Service Bus的Rebus配置,类似于: return Rebus.Config.Configure.With(new UnityContainerAdapter(container)) .Log

在一个C#项目中,我需要为用Azure服务总线实现的信号器制作一个背板。因此,在初创公司中,我写道:

GlobalHost.DependencyResolver.UseServiceBus(asb_endpoint, topic);
在同一个项目中,甚至还有Azure Service Bus的Rebus配置,类似于:

return Rebus.Config.Configure.With(new UnityContainerAdapter(container))
            .Logging(l => l.Log4Net())
            .Transport(l => l.UseAzureServiceBus(cs, qname))
            .Routing(r => r.TypeBasedRoutingFromAppConfig())
            .Options(o => o.SimpleRetryStrategy(errorQueueAddress: errorqname, maxDeliveryAttempts: 3));
两者都使用扩展方法来实现
UseAzureServiceBus
UseServiceBus

问题是:这两种扩展方法都是两个库的一部分,并且这两个库在各种依赖项上相互冲突。要拥有Rebus的
UseAzureServiceBus
扩展,我需要
Rebus.AzureServiceBus
0.99.39版,这反过来至少需要
WindowsAzure.ServiceBus
3.0.4,但这使用了一个名为
Microsoft.ServiceBus
3.0.0的DLL,它与扩展方法UseServiceBus的内部工作相冲突

我该怎么办


编辑1:看起来此问题将通过
Microsoft.AspNet.signal.ServiceBus
解决。同时,我不知道该怎么办听起来好像需要为每个程序集指定一个别名,然后可以在该版本中专门使用该类

见:

MSDN:

下面是一个很好的演练:

另一个选项是使用默认启用的全局别名,然后可以使用全局别名,如果类存在于两个不同的程序集中,则可以使用该类的完整命名空间

例如:


如何在项目启动后立即拥有这两个版本?我需要一个xcopy或类似的东西?你能把一个版本的代码抽象到一个程序集中,把另一个版本的代码抽象到另一个程序集中,每个程序集都有自己的引用集,然后在启动时调用程序集1,在启动时调用程序集2吗?除此之外,您还可以在web配置中执行一些程序集绑定重定向?目前您对此无能为力。我的意思是,有人试图在SignalR中解决这个问题,所以开发人员将原始项目分支,并进行了必要的更改。你可以自己制作一段时间的信号器。
  extern alias FooVersion1;


  FooVersion1::Acme.Foo f = new FooVersion1::Acme.Foo();
  f.Bar();
global::Assembly1.Class1 c = new global::Assembly1.Class1();
global::Assembly2.Class1 c2 = new global::Assembly2.Class1();