2013-10-25 15 views
5

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.

+0

Warum verwenden Sie WinForm? WinForm ist nicht vollständig in Mono implementiert. Auch GTK # -Anwendungen sehen nativer auf Linux aus. – Deffiss

Antwort

3

Sie haben den Fehler falsch verfolgt. Ihre Mono-Version unterstützt keine EnableVisualStyles. Aktualisieren Sie auf eine Version, die es unterstützt (soweit ich mich erinnere>> 2.9) oder versuchen Sie, diese Funktion in Ihrer .net-Anwendung zu deaktivieren, was zu "nicht so netten ui-Elementen" führen wird. Für mich hat es funktioniert, als ich an gentoo arbeitete. Plötzlich, nach einem emerge, stürzte meine Mono-Anwendung nicht mehr ab.

1

Auch sicher sein, dass libgdiplus.so.0 tatsächlich installiert ist und auf dem Pfad ist es nicht standardmäßig in Mono. Aber Hauptsache CentOS kommt standardmäßig mit einer veralteten Version von Mono.

Verwandte Themen