Visual C#2010とWindows 7を使用して正常にコンパイルおよび実行されるコマンドラインC#プログラムがあります。また、Linux / Mono(2.10)でも正常にコンパイルおよび起動しますが、そこにあります。(プログラムはサードパーティのDLLを使用してリモートサーバーからデータをフェッチしています。)
デバッガーで実行すると、DNSルックアップを待機しているように見えました。そこで、IPアドレスに貼り付けてDNSルックアップを行いました。しかし、それでもハングし、デバッガーに侵入すると、3つのスレッドがすべてそこに座って待機していることがわかります。
System.Threading.Monitor.Wait
(タイムアウトを-1に設定)System.Threading.Thread.Sleep
System.Threading.WaitHandle.WaitOne
私はMoMAを使用してDLLを分析しました。これがMono2.8と一致し、2.10.8.1を使用しているため、これがどれほど正確かはわかりませんが、Socket.Dispose()
メソッドが欠落しているとのことです。次に、32個の[MonoTodo]アイテムがあり、そのうち30個はType.op_EqualityまたはType.op_Inequalityです。他の2つはとCredentialCache.get_DefaultCredentials()
ですMemoryMappedFile.CreateOrOpen()
。
しかし、私の注意を引いたのは、レポートの下部に、の2つのエントリがありGetWindowsSocksProxy
、これがにSingleServerConnection.InternetQueryOption
なり、P/Invokeライブラリがwininet.dllになっていることです。これは関連しているのでしょうか?
それで、私にできることはありますか?たとえば、そのDLLをWindowsマシンからLinuxマシンにコピーできますか?もしそうなら、どこに置きますか?
PS接続の問題について疑問に思いました。そこで、Monoを使用して簡単なテストを行いましたWebClient
。これは問題なく機能しました。ただし、興味深い違いの1つは、スクリプトが最初に何かに接続する必要がある時点で、スクリプトが「/usr/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll[外部]」をロードすることです。 。しかし、私のWebClientはそれをしませんでした。