Laden...

Windows.Forms unter LINUX

Erstellt von UweR vor 19 Jahren Letzter Beitrag vor 19 Jahren 6.920 Views
U
UweR Themenstarter:in
91 Beiträge seit 2004
vor 19 Jahren
Windows.Forms unter LINUX

Hallo Leute,

angeblich sollen die normalen WindowsForms ja auch unter LINUX funktionieren wenn MONO und WINE installiert sind. Ich bin gerade dabei das zu testen. Auf meinem SUSE 9.2-System ist sowohl Mono als auch WINE installiert. Wenn ich jedoch ein einfaches Prog starten will kriege ich die Meldung das winelib.exe.so nicht gefunden werden kann. Ich finde in meinem Wine-Verzeichnis alles mögliche, nur nicht diese Datei. Die Meldung ist also korrekt. Kann mir da jemand weiterhelfen.

Gruß
UweR


Gruß
Uwe

H
704 Beiträge seit 2003
vor 19 Jahren

Hi!

.net Anwendungen unter Linux musst du mit "mono MeineAnwendung.exe" aufrufen, damit die Mono Runtime aktiviert wird.

Ich rate dir schleunigst die neuesten Windows Forms für Mono zu holen. Diese basieren nicht mehr auf Wine(die alten, die noch auf Wine basieren werden nicht mehr weiterentwickelt). (http://www.mono-project.com/contributing/winforms.html)

Und dann sollten auch Windows Forms Anwendungen unter Mono ohne Wine laufen 😉

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
U
UweR Themenstarter:in
91 Beiträge seit 2004
vor 19 Jahren

Hallo Hauptmann,

erst mal danke für den Hinweis. Probier ich sofort aus. Das mit dem Aufruf mit mono irgendwas.exe war mir schon klar, Konsolenanwendungen funzen ja bei mir auch, nur die WinForms nicht. Ich hatte mich halt darauf verlassen das die Herren von SUSE (oder auch von mir aus Novell) mir schon was liefern was zusammenpaßt. Aber verläßt man sich auf was, schon ist man verlassen.


Gruß
Uwe

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo,

vor 2 Wochen habe ich probiert, mono unter SuSE so zu installieren,
dass ich Windows.Forms verwenden kann. Es ist mir nicht gelungen.
Nach einer mehrstuendigen Installations-Orgie habe ich aufgegeben.

Vorgestern stand bei Heise, dass es eine neue Version von mono
gibt. www.heise.de/newsticker/meldung/56626

Also habe ich es mit dieser neuen Version heute erneut probiert.
Nach 6 Stunden wieder leider ohne Erfolg. 😦

Ich habe sowohl die rpm-Pakete und dazu die libgdi-Quellen
heruntergeladen und kompiliert/installiert als es auch mit
der Datei monobundle.1.1.4-2.installer.bin probiert.

"mono abc.exe" liefert "An exception was thrown by the
type initializer for System.Windows.Form..."

"mcs abc.cs" liefert "The type ... Windows could not be found ... in System".

Kann mir vielleicht jemand einen Tipp geben, woran das liegen koennte?
Bzw. gibt es jemanden, der/die es geschafft hat, Windows.Forms mit mono
unter SuSE 9.2 zu verwenden?

So wie ich das verstehe, muss z.B. lediglich die monobundle...bin-Datei
einmal aufgerufen/ausgefuehrt werden und dann sollte es gehen...

Mir ist aber nicht klar, wie ich nach der Installation einfach und systematisch
pruefen kann, ob die Windows.Forms ordentlich installiert sind oder nicht.

Es muss doch eine assembly/library oder aehnliches geben, in der sie stecken.
Wie heisst die und wie werfe ich einen Blick da rein?

Tschuess
Karl

C
61 Beiträge seit 2004
vor 19 Jahren

Stell doch mal den Code von abc.cs online, dann können wir schauen, was sich machen lässt! 🙂

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo,

den folgenden Code habe ich mit Visual Studio .NET 2003 erstellt.
Es ist einfach nur ein Fenster (Form1), das den Titel "Hallo Welt" hat.


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace project_mono_test
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			//
			// Form1
			//
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(292, 266);
			this.Name = "Form1";
			this.Text = "Hallo Welt";

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main()
		{
			Application.Run(new Form1());
		}
	}
}

Mit z.B. "csc abc.cs" kann ich die Datei unter Windows kompilieren.

Unter Linux liefert "msc abc.cs" den Fehler "abc.cs(14) error CS0234:
The type or namespace name 'Windows' could not be found in namespace
'System'"

Tschuess
Karl

P
939 Beiträge seit 2003
vor 19 Jahren

Hi schock,

gut, dass du die Fehlermeldung nochmal vollständig gepostet hast:
"The type or namespace name 'Windows' could not be found in namespace 'System'"

Das hier war total sinnentstellt:
"The type ... Windows could not be found ... in System."

Die Meldung bekommt man, wenn eine benötigte Bibliothek nicht referenziert ist. Also die Bibliothek mit der Mono-Implementierung von System.Windows.Forms.

Auf www.mono-project.com steht, dass für WinForms die Bibliotheken libgdiplus und Cairo benötigt werden. Kann aber gut sein, dass da noch andere Dateien angegeben werden müssen.

Referenzieren geht so:

msc --reference=lib1;lib2 abc.cs

Gruss
Pulpapex

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo,

> Auf www.mono-project.com steht, dass für WinForms die Bibliotheken libgdiplus
> und Cairo benötigt werden. Kann aber gut sein, dass da noch andere Dateien
> angegeben werden müssen.

Genau mit der Installation der Bibliotheken habe ich ja so meine Probleme
(siehe weiter oben).

Zuerst mal stellt sich mir die Frage, ob in monobundle.1.1.4-2.installer.bin
alle benoetigten Bibliotheken enthalten sind oder nicht. Der Name "bundle"
legt ja eigentlich nahe, das alles mit dabei ist.

Wenn im bundle nicht alles mit dabei ist, geht es darum, was neben dem
bundle noch benoetigt wird.

Wie gesagt, die Quellen von libgdiplus (und cairo) hatte ich auch herunter-
geladen und unter grossen Problemen kompiliert bekommen. Trotzdem
geht es nicht, wobei ich nicht sagen kann, ob es an einer fehlerhaften
Installation liegt, da mir nicht klar ist, ob ich bei der Installation alles
richtig und vollstaendig gemacht habe.

Darum ja auch weiter oben meine Frage danach, wo ich nach der
Installation die Bibliotheken finde und welche Bibliotheken mit welchem
Inhalt es geben muss.

> msc --reference=lib1;lib2 abc.cs

Danke fuer den Hinweis. Jetzt weiss ich schon mal, wie ich die Bibliotheken
mit einbinden koennte.
Aber wenn ich beim Kompilieren von libgdiplus z.B. "make install" mache, dann
gehe ich davon aus, dass eine dabei erstellte Bibliothek an den richtigen Ort
kopiert wird, so dass ich sie beim Aufruf von msc nicht mehr explizit mit angeben
muss. Das ist jedenfalls mein Verstaendnis von der Option install. Leider ist der
makefile der libgdiplus fuer mich unverstaendlich, so dass ich nicht
herausfinden konnte, wo denn das "install" die Bibliothek hinpackt.
Ich meinte /usr/local aufblitzen zu sehen, aber /usr/local/lib ist leer.

Also wenn es jemand unter SuSE am Laufen hat:

  • Was hat er/sie alles installiert?
  • Muss msc mit bestimmten Argumenten aufgerufen werden?

Tschuess
Karl

P
939 Beiträge seit 2003
vor 19 Jahren

Unter Windows muss man dem csc auch die verwendeten Bibliotheken mitteilen. Das hat nichts mit der Installation zu tun.

Versuch es mal so. Ich hab ein bisschen im Netz gesucht, gut möglich, dass die Mono-Assemblies genauso heissen wie die von .Net:

mcs --reference=System.Windows.Forms.dll abc.cs

# alternativ mal so versuchen
mcs -r System.Windows.Forms.dll abc.cs

Wenn sich die Fehlermeldung ändert, ist das schon mal ein Fortschritt.

Auf CodeProject gibt es einen sehr ausführlichen Artikel zu Mono:
Introduction to Mono - Your first Mono app

Da wird auch die ganze Installation nochmal erklärt. Ist vom 25. Jan 2005.

Gruss
Pulpapex

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo,

> Auf CodeProject gibt es einen sehr ausführlichen Artikel zu Mono:
> Da wird auch die ganze Installation nochmal erklärt. Ist vom 25. Jan 2005.

Das scheint wirklich ein guter Artikel zu sein. Er ist aber leider veraltet,
da er sich auf mono 1.0.5 bezieht.

> mcs -r System.Windows.Forms.dll abc.cs

Ein sehr nuetzlicher Hinweis. Danke. 🙂

"find / -name System.Windows.Forms.dll" hat gezeigt, dass diese dll im
monobundle-1.1.4 enthalten ist.

Und was noch besser ist: Mit

mcs -r System.Data -r System.Drawing -r System.Windows.Forms abc.cs

laesst sich abc.cs jetzt kompilieren zu abc.exe. 🙂

Wenn ich diese abc.exe unter Windows starte, laeuft das Programm
und zeigt ein Fenster mit dem Titel "Hallo Welt". So weit so gut...

... aber wenn ich es unter Linux mit "mono abc.exe" probiere, kommen
folgende Fehlermeldungen:

Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.DllNotFoundException: libX11
in <0x0004a> (wrapper managed-to-native) System.Windows.Forms.XplatUIX11:XOpenDisplay (intptr)
in <0x00092> System.Windows.Forms.XplatUIX11:.ctor ()
in <0x00044> System.Windows.Forms.XplatUIX11:GetInstance ()
in <0x0004e> System.Windows.Forms.XplatUI:.cctor ()
--- End of inner exception stack trace ---
in (unmanaged) 0x80861bf
in <0x000c4> System.Windows.Forms.Control:get_CreateParams ()
in <0x0020a> System.Windows.Forms.Control:.ctor ()
in <0x00014> FormParentWindow:.ctor (System.Windows.Forms.Form)
in <0x00029> (wrapper remoting-invoke-with-check) FormParentWindow:.ctor (System.Windows.Forms.Form)
in <0x00039> System.Windows.Forms.Form:get_CreateParams ()
in <0x0020a> System.Windows.Forms.Control:.ctor ()
in <0x0000d> System.Windows.Forms.ScrollableControl:.ctor ()
in <0x0000a> System.Windows.Forms.ContainerControl:.ctor ()
in <0x00010> System.Windows.Forms.Form:.ctor ()
in <0x00017> project_mono_test.Form1:.ctor ()
in <0x00021> (wrapper remoting-invoke-with-check) project_mono_test.Form1:.ctor ()
in <0x0001a> project_mono_test.Form1:Main ()

Ich interpretiere das so, das die libX11 nicht gefunden wird, was mich wundert,
denn in /usr/X11R6/lib ist sie vorhanden (libX11.so.6).

Kann es sein, dass ich mono auch noch Argumente mitgeben muss?
"mono -h" sagt leider nichts dazu.

Tschuess
Karl

X
133 Beiträge seit 2004
vor 19 Jahren

Hallo an alle

Ich habe letztens in einer c't in einem Interview mit Miguel de Icaza gelesen das Windows.Forms noch gar nicht 100% unterstützt wird sondern noch alles visuelle mit GDI# gemacht werden muss.
Oder hab ich da was falsch verstanden?

Um was wirklich Neues zu erschaffen muss man das Rad neu erfinden

C
61 Beiträge seit 2004
vor 19 Jahren

Hast du die libgdiplus installiert? Daran könnte es evtl. liegen ...

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo x-sharp,

> Oder hab ich da was falsch verstanden?

Wenn du das Interview in der ix (www.heise.de/ix/artikel/2005/03/034)
meinst, dann hast du das richtig verstanden, aber das bezieht sich alles
auf mono 1.0.

Das Verlockende ist ja, dass Windows.Forms bei mono 1.1.4 schon recht
gut - also ernsthaft - unterstuetzt werden soll.

Es scheint (hier in diesem Forum) bloss niemanden zu geben der/die das
praktiziert.

Tschuess
Karl

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo cYaONE,

> Hast du die libgdiplus installiert?

Davon gehe ich mal aus, denn in monobundle-1.1.4/mono/lib
gibt es libgdiplus.a und libgdiplus.so.0.0.0.

Tschuess
Karl

T
81 Beiträge seit 2004
vor 19 Jahren

Ich habe letztens in einer c't in einem Interview mit Miguel de Icaza gelesen das Windows.Forms noch gar nicht 100% unterstützt wird sondern noch alles visuelle mit GDI# gemacht werden muss.

Hier kannst sogar nachlesen, welche Klassen bereits klappen und welche nicht:
http://svn.myrealbox.com/mwf/owners.html

Und übrigens /me verwendet mono auch, hab aber nicht alles installiert, so fehlt mir noch
die Assembly System.Data.dll um dein Beispiel erfolgreich kompilieren zu können.
Wollte nur mal probieren, wie gut Window.Forms klappen.

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo Tankian,

> Und übrigens /me verwendet mono auch

Da keimt Hoffnung auf... Unter welchem Linux denn?

> hab aber nicht alles installiert

Daraus schlussfolgere ich mal, dass du nicht monobundle-1.1.4
verwendet hast.

Wenn du unter SuSE installiert hast: Hast du rpm-Pakete installiert?
Wenn ja, weisst du noch, welche Pakte das waren?

Tschuess
Karl

T
81 Beiträge seit 2004
vor 19 Jahren

Da keimt Hoffnung auf... Unter welchem Linux denn?

Fedora Core 3

Daraus schlussfolgere ich mal, dass du nicht monobundle-1.1.4
verwendet hast.

Wenn du unter SuSE installiert hast: Hast du rpm-Pakete installiert?
Wenn ja, weisst du noch, welche Pakte das waren?

Eigentlich wollte ich ja yum dazu verwenden, nur irgendwie klappte das nicht. Geht
anscheinend nur mit Fedora Core 1 & 2 .. Habs also mit rpms installiert. Weiß allerdings
nicht mehr absolut sicher welche.

Auf jeden Fall mal:
mono-core-1.1.4-1
mono-devel-1.1.4-1
mono-winforms-1.1.4-1
mono-data-1.1.4-1
libgdiplus-1.1.4-1

Der Rest sind dann glaub ich nur noch abhängige rpms, die man in der 1.0.6 Version finden kann.

Nebenbei noch: Inzwischen lässt sich dein Beispiel bei mir kompilieren sowie problemlos ausführen.

mcs -reference:System.Data.dll -reference:System.Design.dll -reference:System.Drawing.dll -reference:System.Windows.Forms.dll testfile.cs

X
133 Beiträge seit 2004
vor 19 Jahren

Danke für die Antwort (war die ix, pardon)

Hier kannst sogar nachlesen, welche Klassen bereits klappen und welche nicht:

>

Danke hab ich mal in meine Bookmarks eingefügt.
So langsam wird das Thema Mono echt interessant für mich.

Um was wirklich Neues zu erschaffen muss man das Rad neu erfinden

S
12 Beiträge seit 2005
vor 19 Jahren

Hallo,

> Inzwischen lässt sich dein Beispiel bei mir problemlos ausführen.

Oh, bei mir jetzt auch! 🙂

Ich hatte ja folgendes geschrieben:

> Fehlermeldung: ... System.DllNotFoundException: libX11 ...
>
> Ich interpretiere das so, das die libX11 nicht gefunden wird, was mich wundert,
> denn in /usr/X11R6/lib ist sie vorhanden (libX11.so.6).
>
> Kann es sein, dass ich mono auch noch Argumente mitgeben muss?

Unter www.pokorra.de/dotnet habe ich den entscheidenden Hinweis gefunden:

> need to copy file /usr/X11R6/lib/libX11.so.6 to mono/install/lib
> need to add line
> dllmap dll="libX11" target="libX11.so.6"
> to file install/etc/mono/config
> to avoid message dllnotfoundexception libX11

Also habe ich "cp /usr/X11R6/lib/libX11.so.6 ~/monobundle-1.1.4/mono/lib"
gemacht und die Zeile 'dllmap dll="libX11" target="libX11.so.6"' in der
Datei ~/monobundle-1.1.4/mono/etc/mono/config eingetragen.

"mono abc.exe" zeigt nun ein Fenster mit dem Titel "Hallo Welt", womit ich
wunschlos zufrieden bin. 🙂

Dank an alle fuer die Hilfe.

Tschuess
Karl

Ich werde die Quintessenz der Beitraege hier morgen noch kurz zusammenfassen.