1

在 C# 项目中,我需要为使用 Azure 服务总线实现的 SignalR 制作背板。所以在启动时我写道:

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));

两者都使用扩展方法来实现UseAzureServiceBusand UseServiceBus

问题是:这两个扩展方法都是两个库的一部分,并且这个库在各种依赖项上发生冲突。要拥有 Rebus 的UseAzureServiceBus扩展,我需要Rebus.AzureServiceBus版本 0.99.39,而这又需要至少WindowsAzure.ServiceBus3.0.4,但这使用了一个名为Microsoft.ServiceBus3.0.0 的 DLL,它与扩展方法 UseServiceBus 的内部工作相冲突。

我该如何处理?

编辑 1: 看起来这个问题将在Microsoft.AspNet.SignalR.ServiceBus 2.2.2 版本中得到修复。我不知道在这期间做什么

4

1 回答 1

1

听起来您需要给每个程序集一个别名,然后您可以专门使用该版本中的类。

看:

Visual Studio 8 中程序集引用的 Aliases 属性有什么用

MSDN: https ://msdn.microsoft.com/en-us/library/ms173212.aspx

这是一个很好的演练: https ://blogs.msdn.microsoft.com/ansonh/2006/09/27/extern-alias-walkthrough/

在此处输入图像描述

  extern alias FooVersion1;


  FooVersion1::Acme.Foo f = new FooVersion1::Acme.Foo();
  f.Bar();

您拥有的另一个选项是使用默认启用的全局别名,然后您可以使用 global,然后使用您需要使用的类的完整命名空间(如果它存在于 2 个不同的程序集中)。

例如:

global::Assembly1.Class1 c = new global::Assembly1.Class1();
global::Assembly2.Class1 c2 = new global::Assembly2.Class1();
于 2017-04-07T10:17:37.573 回答