我有一个命令行 C# 程序,可以使用 Visual C# 2010 和 Windows 7 编译和运行良好。它也可以在 Linux/Mono (2.10) 上编译和启动,但然后就在那里。(该程序使用第 3 方 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 机器吗?如果是这样,我应该把它放在哪里?
PS我想知道连接问题。因此,我使用 快速测试了 Mono WebClient
,效果很好。但一个有趣的区别是非工作脚本在它首先需要连接到某物的地方加载“/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll [External]” . 但我的 WebClient 从来没有这样做过。