将Socket.io 1.0客户端与c#程序集成

将Socket.io 1.0客户端与c#程序集成,c#,sockets,socket.io-1.0,C#,Sockets,Socket.io 1.0,我是Socket新手,我一直在尝试将Socket.io 1.0客户端集成到我的C#程序中,但没有成功 我正在使用它来完成这项工作,这是我找到的唯一支持socket.io1.0的选项(不幸的是,例如只支持0.9)。该计划最初的目标是.NET framework 4.0,我必须对其进行更改,以确保其与.NET 3.5和4.5的兼容性 我的代码片段: using SteamKit2; using SteamTrade; using SteamTrade.TradeWebAPI; using Steam

我是Socket新手,我一直在尝试将Socket.io 1.0客户端集成到我的C#程序中,但没有成功

我正在使用它来完成这项工作,这是我找到的唯一支持socket.io1.0的选项(不幸的是,例如只支持0.9)。该计划最初的目标是.NET framework 4.0,我必须对其进行更改,以确保其与.NET 3.5和4.5的兼容性

我的代码片段:

using SteamKit2;
using SteamTrade;
using SteamTrade.TradeWebAPI;
using SteamTrade.TradeOffer;
using System;
using System.IO;
using System.Net;
using System.Timers;
using System.Threading;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Linq;
using System.Diagnostics;
using System.Web.Script.Serialization;
using Newtonsoft.Json;
using MySql.Data.MySqlClient;
using Quobject.SocketIoClientDotNet.Client;
using Quobject.EngineIoClientDotNet.Client.Transports;
using Quobject.EngineIoClientDotNet.ComponentEmitter;
using Quobject.EngineIoClientDotNet.Modules;
using Quobject.EngineIoClientDotNet.Parser;
using Socket = Quobject.SocketIoClientDotNet.Client.Socket;

namespace Foo
{
    public class Bar
    {
        public override void fooBar()
        {
            // just to test, didn't go any further because of errors
            var socket = IO.Socket("http://localhost");
            socket.On(Socket.EVENT_CONNECT, () =>
            {
                socket.Emit("hi");
                socket.On("hi", (data) =>
                {
                    Console.WriteLine(data);
                    socket.Disconnect();
                });
            });

            // more code...
        }

        // more code...
    }
}
问题就从这里开始:

添加对
System.Threading.Tasks.NET35
的引用

»»在不删除引用的情况下瞄准.Net Framework 4.0或4.5会导致错误:

Error   17  The type 'System.Threading.Tasks.Task<TResult>' exists in both 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll' and 'c:\MyApp\trunk\packages\System.Threading.Tasks.Unofficial.3.1\lib\net35\System.Threading.Tasks.NET35.dll'
错误17类型“System.Threading.Tasks.Task”存在于“c:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll”和“c:\MyApp\trunk\packages\System.Threading.Tasks.Unofficial.3.1\lib\net35\System.Threading.Tasks.net35.dll”中
»»将目标框架更改为3.5会导致其他依赖项中断,错误396找不到类型或命名空间名称“FooBar”(您是否缺少using指令或程序集引用? ,所以我也不能这么做

»»删除对
System.Threading.Tasks.NET35的引用会导致
System.IO.FileNotFoundException
异常,原因是
qobject.SocketIoClientDotNet.Client.IO


基本上我被困在这里,需要指导。如果您对如何使Socket.io 1.0在这里工作有任何帮助和建议,我们将不胜感激。谢谢

显然,问题是由于在针对.Net 4.0时安装了SocketIoClientDotNet造成的,而该.Net 4.0错误地要求System.Threading.Tasks.NET35。以.Net 4.5为目标,然后重新安装SocketIOClientDonet解决了这个问题。

为什么有25个
语句使用
呢?我看到您为了简洁起见删减了一些代码,但单个文件中的语句计数让我怀疑,关注点之间几乎没有分离。这种代码气味也可能使您的问题更难解决。为了帮助您解决问题:我将创建一个单独的独立项目,该项目应该使用socket.io完成最简单的工作。基本上是socket.io的Hello World。执行此操作将帮助您隔离问题并确定解决方案。显然,问题是由于在以.Net 4.0为目标时安装了SocketIoClientToNet而导致的,而该目标错误地要求System.Threading.Tasks.NET35。以.Net 4.5为目标,然后重新安装SocketIoClientDotNet解决了这个问题。很高兴您解决了这个问题。你应该把它写下来作为一个答案,使这篇文章对人们有用。你可以接受自己的答案。另外,请在@PaulSasik上发表评论,我将投票表决。谢谢!在发行版中支持.NET4.0。