【发布时间】:2016-07-16 17:51:50
【问题描述】:
我有一个使用 SignalR 和 Owin 的 Web 应用程序。除了其他人,我正在使用 NuGet 包:
- Microsoft.AspNet.SignalR.Core:2.2.0
- Microsoft.AspNet.SignalR.Owin:1.2.2
- Microsoft.Owin:3.0.1
- 欧文: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(程序集 组装)
为了看到提到的 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,版本=2.2.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”加载类型“Microsoft.AspNet.SignalR.Hosting.IWebSocketRequest”。 System.TypeLoadException:从程序集“Microsoft.AspNet.SignalR.Owin,版本=1.2.2.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”中键入“Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler”正在尝试实现无法访问的接口。
下一步是手动实例化Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler:
var handler = new Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler();
不幸的是,这造成了编译错误:
“Microsoft.AspNet.SignalR.Core, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”和“Microsoft.AspNet.SignalR.Owin, Version=1.2.2.0”中都存在“DefaultWebSocketHandler”类型,文化=中立,PublicKeyToken=31bf3856ad364e35'
在对象浏览器中,我可以看到这是正确的。但我不知道,我怎样才能摆脱这个错误。
【问题讨论】: