Ich habe eine Testanwendung mit WinForm in C# .Net auf Visual Studio 2010 entwickelt. Jetzt möchte ich dies unter Linux mit Mono auf CentOS ausführen. Also habe ich versucht, unter Befehlsfolge -Ausführen von .Net-Anwendung mit Mono auf CentOS oder Linux
[[email protected] TestLinux]# /usr/bin/mono ./Test.exe
ich eine Ausnahme treffen
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]
Während einige der Forschung fand ich, dass dies auf die Verknüpfung zwischen gdiplus.dll zurückzuführen ist und dessen Gegenstück libgdiplus.so.0 auf Linux, muss seinen Eintrag in ldconfig-Cache setzen.
[[email protected] TestLinux]# ldconfig -p | grep libgdiplus
libgdiplus.so.0 (libc6) => /usr/lib/libgdiplus.so.0
Der Ausgang zeigt deutlich, dass libgdiplus.so.0 in ldconfig Cache gibt es aber immer noch das Programm funktioniert nicht. Ich habe auch versucht DllMap Eintrag in der Anwendungskonfiguration wie unten
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
<dllmap dll="gdiplus.dll" target="libgdiplus.so.0"/>
</configuration>
Bitte lassen Sie mich wissen, ob jemand eher zufällig auf dieses in Vergangenheit hinzuzufügen.
Warum verwenden Sie WinForm? WinForm ist nicht vollständig in Mono implementiert. Auch GTK # -Anwendungen sehen nativer auf Linux aus. – Deffiss