我有一个命令行C#程序,使用Visual C#2010和Windows 7编译并运行良好。它还可以在Linux / Mono(2.10)上编译并启动,但随后就可以了。 (该程序使用第三方DLL从远程服务器获取数据。)
在调试器中运行它,我看到它似乎在等待DNS查找。所以我对它进行了DNS查找,粘贴在IP地址中。但它仍然挂起,并且进入调试器显示三个线程都坐在那里等待:
System.Threading.Monitor.Wait
(超时设置为-1)System.Threading.Thread.Sleep
System.Threading.WaitHandle.WaitOne
我使用MoMA来分析DLL。我不确定它是多么准确,因为它与Mono 2.8相匹配,我使用的是2.10.8.1,但它说Socket.Dispose()
是一种缺失的方法。然后是32个[MonoTodo]项目,其中30个是Type.op_Equality或Type.op_Inequality。其他两个是CredentialCache.get_DefaultCredentials()
和MemoryMappedFile.CreateOrOpen()
。
但引起我注意的是,在报告的底部,GetWindowsSocksProxy
有两个条目,变成SingleServerConnection.InternetQueryOption
,P / Invoke库是wininet.dll。这可能是相关的吗?
那么,我能做些什么吗?例如。我可以将该DLL从Windows机器复制到我的linux机器吗?如果是的话,我该把它放在哪里?
P.S。我想知道连接问题。所以我使用WebClient
进行了快速测试Mono,效果很好。但一个有趣的区别是非工作脚本在首次需要连接到某些东西时加载“/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll [External]” 。但我的WebClient从未这样做过。