我有一个使用SignalR和Owin的Web应用程序。除了其他人,我正在使用NuGet包:
当我使用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'
在对象浏览器中,我可以看到这是对的。但我不知道,我怎么能摆脱这个错误。
答案 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
...