Microsoft.AspNet.SignalR.Core和Microsoft.AspNet.SignalR.Owin中的重复定义

时间:2016-03-29 09:04:06

标签: signalr owin

我有一个使用SignalR和Owin的Web应用程序。除了其他人,我正在使用NuGet包:

  • Microsoft.AspNet.SignalR.Core:2.2.0
  • Microsoft.AspNet.SignalR.Owin:1.2.2
  • Microsoft.Owin:3.0.1
  • Owin:1.0

当我使用OwinHost.exe启动Owin应用程序时,我总是在第一次请求后看到以下输出

  

从'Microsoft.AspNet.SignalR.Owin,Version = 1.2.2.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'获取类型时抛出异常。',Exception = System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型。检索LoaderExceptions属性以获取更多信息。           在System.Reflection.RuntimeModule.GetTypes(RuntimeModule模块)           在System.Reflection.Assembly.GetTypes()           在System.Web.Http.Tracing.Tracers.DefaultHttpControllerTypeResolverTracer.GetTypesAndTrace(Assembly)   组件)

为了查看提到的LoaderExceptions属性,我添加了我的启动代码:

try
{
  Assembly a = Assembly.Load("Microsoft.AspNet.SignalR.Owin");
  var types = a.GetTypes(); 
}
catch (ReflectionTypeLoadException e)           
{
  foreach (var e2 in e.LoaderExceptions)
    Console.WriteLine(e2);          
}

这产生了额外的输出:

  

System.TypeLoadException:无法从程序集“Microsoft.AspNet.SignalR.Core,Version = 2.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”加载类型“Microsoft.AspNet.SignalR.Hosting.IWebSocketRequest”。   System.TypeLoadException:从程序集“Microsoft.AspNet.SignalR.Owin”中键入“Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler”,Version = 1.2.2.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'正在尝试实现无法访问的接口。< / p>

下一步是手动实例化Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler

var handler = new Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler();

不幸的是,这造成了编译错误:

  

类型'DefaultWebSocketHandler'存在于'Microsoft.AspNet.SignalR.Core,Version = 2.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'和'Microsoft.AspNet.SignalR.Owin,Version = 1.2.2.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35'

在对象浏览器中,我可以看到这是对的。但我不知道,我怎么能摆脱这个错误。

1 个答案:

答案 0 :(得分:0)

解决方案非常简单:我只需要删除Microsoft.AspNet.SignalR.Owin。

在用ILSpy检查两个组件后,我找到了这个解决方案。我在OwinExtensions Microsoft.AspNet.SignalR.Owin的{​​{1}}中找到ObsoleteOwinExtensions Microsoft.AspNet.SignalR.Core。此外,我已使用OwinExtensions中的Microsoft.AspNet.SignalR.Core

另一个暗示可能是Microsoft.AspNet.SignalR.Owin ...

的过时版本