通用 Windows 平台和 SignalR(无法加载文件或程序集 'System.Net,版本=2.0.5.0)

Universal Windows Platform and SignalR (Could not load file or assembly 'System.Net, Version=2.0.5.0)

使用新的通用 Windows 平台和 SignalR 客户端(来自 Nuget)时,当您设置网络凭据时会发生奇怪的事情。

以下代码可以完美运行:

NetworkCredential Connection_Credentials = new NetworkCredential( "Name", "Password" );
Microsoft.AspNet.SignalR.Client.Connection Connection = new Microsoft.AspNet.SignalR.Client.Connection( "http://localhost/Bla" );

但是,当您以下列方式分配 NetworkCredential 时,运行时甚至在执行代码之前就崩溃了:

NetworkCredential Connection_Credentials = new NetworkCredential( "Name", "Password" );
Microsoft.AspNet.SignalR.Client.Connection Connection = new Microsoft.AspNet.SignalR.Client.Connection( "http://localhost/Bla" );
Connection.Credentials = Connection_Credentials;

错误是:"System.IO.FileNotFoundException: Could not load file or assembly 'System.Net, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes' or one of its dependencies. The system cannot find the file specified.\r\n at UAP2.MainPage.Page_Loaded(Object sender, RoutedEventArgs e)"

这是一个我可以自己修复的错误(我尝试对另一个项目做同样的事情)还是 SignalR 包(或其依赖项之一?)中存在问题。
为什么要引用 System.Net 的 2.0.5.0 而不是 4-* 版本?

我没有问题的答案,但我在 GitHub 上报告了一个相关问题。希望有人最终会调查它。

https://github.com/SignalR/SignalR/issues/3483

编辑:

用 SignalR.Client 的源代码做了一些测试,它在 DefaultHttpHandler(IConnection connection) 构造函数中崩溃了。最有可能在 System.Net.Http.HttpClientHandler 构造函数中(我没有源代码)。

解决此问题的方法是在不支持 SL5 的情况下编译 SignalR 客户端 DLL - 针对 .NET 4.5、Windows 8、Windows Phone Silverlight 8 和 Windows Phone 8.1,也称为 PCL 配置文件 259.

有点粗糙,不过我找到了一个fix/workaround。基本上,您必须确保使用 WinRT 项目中的程序集,而不是 NuGet 附加的两个程序集。详情见http://dotnetbyexample.blogspot.nl/2015/05/getting-signalr-clients-to-work-on.html