5

Visual Studio 2010 の C# .Net で WinForm を使用してテスト アプリケーションを開発しました。これを、CentOS で Mono を使用して Linux で実行したいと考えています。だから私は以下のコマンドシーケンスを試しました -

[root@localhost TestLinux]# /usr/bin/mono ./Test.exe

例外が発生しました

Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus ---> System.DllNotFoundException: gdiplus.dll
  at (wrapper managed-to-native) System.Drawing.GDIPlus:GdiplusStartup (ulong&,System.Drawing.GdiplusStartupInput&,System.Drawing.GdiplusStartupOutput&)
  at System.Drawing.GDIPlus..cctor () [0x00000] --- End of inner exception stack trace ---

  at <0x00000> <unknown method>
  at System.Drawing.Graphics.FromHdcInternal (IntPtr hdc) [0x00000] 
  at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) [0x00000] 
  at System.Windows.Forms.XplatUIX11..ctor () [0x00000] 
  at System.Windows.Forms.XplatUIX11.GetInstance () [0x00000] 
  at System.Windows.Forms.XplatUI..cctor () [0x00000] --- End of inner exception stack trace ---

  at <0x00000> <unknown method>
  at System.Windows.Forms.Application.EnableVisualStyles () [0x00000] 
  at Test.Program.Main () [0x00000] 

いくつかの調査を行っているときに、これは Linux 上の gdiplus.dll とその対応部分 libgdiplus.so.0 の間のリンクが原因であることがわかりました。そのエントリを ldconfig キャッシュに入れる必要があります。

[root@localhost TestLinux]# ldconfig -p | grep libgdiplus
    libgdiplus.so.0 (libc6) => /usr/lib/libgdiplus.so.0

出力は、libgdiplus.so.0 が ldconfig キャッシュにあることを明確に示していますが、それでもプログラムは動作していません。また、以下のようにアプリケーション構成に DllMap エントリを追加しようとしました

<?xml version="1.0"?>
<configuration>
<startup>
  <supportedRuntime version="v2.0.50727"/>
</startup>  
    <dllmap dll="gdiplus.dll" target="libgdiplus.so.0"/>  
</configuration>

誰かが過去にこれに出くわした場合はお知らせください。

4

2 に答える 2

3

エラーを間違って追跡しました。Mono バージョンは EnableVisualStyles をサポートしていません。それをサポートするバージョンにアップグレードするか (私が覚えている限りでは >= 2.9 です)、または .net アプリケーションでこの機能を無効にしようとすると、「あまり良くない UI 要素」になります。私はgentooで作業していたので、うまくいきました。突然、emerge の後、mono アプリケーションがクラッシュしなくなりました。

于 2013-10-25T11:18:23.100 に答える