2010-05-04 11 views
9

Was ist normalerweise zu tun, um eine WinForms-Anwendung auf einem Mac oder Linux-Rechner auszuführen?Wie ist das plattformübergreifende .Net-Framework wirklich?

a. Einfach kopieren und ausführen (vorausgesetzt, sie haben ein Framework installiert).
b. Neu erstellen.
c. Änderungen am kosmetischen Quellcode
d. Heavy Source Code Modifikationen und Formulare Redesign.

Unter der Annahme, dass die Anwendung entwickelt wird als 100% mittels C# 3-Code verwalteten Visual C# Express oder Visual Studio 2008 Targeting .Net Framework 3.5, entwickelt ohne die Verwendung von 3-rd Party-Komponenten/Bibliotheken, ohne Verkapselung nonmanaged Code oder jede Low-Level-Hacks - nur Standard-Microsoft-dokumentiert .Net Framework C# API verwendet. Oder die gleichen Bedingungen, aber C# 4 Sprache, .Net Framework 4 und Visual Studio 2010.

Gibt es irgendwo einen praktischen Leitfaden für die Entwicklung von Mono-bereiten Anwendungen mit MS .Net Framework und Visual Studio? Irgendwelche Richtlinien, Tipps, spezifische Aspekte, die einen Entwickler darüber informieren, was er wirklich im Kopf behalten muss, um eine leicht zu übertragende Anwendung zu schreiben, ohne jede Funktion in der Mono-Referenz während der Programmierung in Visual Studio nachschlagen zu müssen.

Antwort

12

Es ist möglich, dass Ihre App nur mit Null-Modifikationen läuft, aber ich habe noch nicht gesehen, dass das in der realen Welt passiert.

Ein Werkzeug, das Ihnen sehr helfen kann, ist MoMA. MoMA wird von den gleichen Leuten gemacht, die Mono machen, und wird dir sagen, ob du irgendwelche Funktionen verwendest, die noch nicht portiert wurden.

Im Allgemeinen ist .NET 3.5 und Winforms meist OK. Die Kompatibilität mit Version 4 befindet sich noch in der Entwicklung.

Ein aktuelleres Tool, wenn Sie Ihre Entwicklung unter Windows machen, ist die .NET Portability Analyzer von Microsoft. Dies kann über Visual Studio verwendet werden.

+1

(Sie können weitere Informationen erhalten http://www.mono-project.com/Compatibility) – andypaxo

+0

„Es ist möglich, dass Ihre Anwendung wird nur mit Null-Modifikationen laufen "- Ich kann es kaum glauben, da eine Windows-EXE-Datei auf einer Windows-Maschine gebaut und ausgeführt wird (anders als bei Java, deren JAR-Dateien nicht plattformspezifisch sind). Meinst du, eine .Net EXE soll auf Mac oder Linux mit Mono ohne Wine laufen? – Ivan

+10

@Ivan Ja, eine ausführbare .NET-Datei ist keine normale Windows-Binärdatei, sondern eine Datei, die Code enthält, der auf einer virtuellen Maschine (CLR) läuft, ähnlich wie Java. – andypaxo

5

Wenn es sich um eine Windows Forms-Anwendung handelt, die standardmäßige Windows Forms-Steuerelemente und keine Komponenten von Drittanbietern verwendet, können Sie dies normalerweise direkt auf Mono ausführen, indem Sie eine Kopie erstellen und ausführen.

Mono unterstützt Windows Forms und C# 3-Funktionen sehr gut.

Wenn Sie jedoch native Komponenten verwenden, wird Datenzugriff außerhalb von dem, was von Mono oder WPF unterstützt wird, Probleme auftreten. C# 4/.NET 4 wird wahrscheinlich auch an dieser Stelle nicht funktionieren.

+0

Ich habe immer noch etwas falsch mit Resx und libgdiplus. :) Zum Glück können sie herum gearbeitet werden. –

0

Theoretisch ist .NET vollständig plattformübergreifend, da es nicht von einer bestimmten Architektur, sondern von einer VM abhängt.

In der Praxis haben Sie jedoch die Microsoft-Implementierung für Windows und die Mono-Implementierung für Linux/Mac. Das Hauptproblem besteht darin, dass sich die Implementierungen voneinander unterscheiden können, sodass es schwierig ist, eine Anwendung auf mehreren Computern sofort auszuführen.

Der Quellcode sollte nicht geändert werden müssen, wenn nicht einige der Bibliotheken nicht in Mono portiert werden oder andere Bibliotheken verwendet werden.

C# 4 kann etwas schwieriger sein, da mono für die Microsoft-Implementierung noch nicht auf dem neuesten Stand ist.

+2

Die Sache ist, Mono macht eine Menge von Tests gegen Microsoft.NET, einschließlich, wenn ich mich nicht irre, duplizieren Implementierungsquirks, wo MS.NET unterscheidet sich von den ECMA CLR-Standards. Wo Inkompatibilitäten zwischen den beiden CLR-Implementierungen auftreten, sind in der Regel alles neu in Microsoft, oder unvollständige Arbeit in Monos. –

1

Nun, ich habe keine großen Projekte entwickelt, aber aus meiner Erfahrung müssen Sie einige kleine Änderungen an Ihrem Code vornehmen, aber nur um einige Dinge zu verfeinern. Die Anwendung selbst sollte ohne Neukompilierung gut funktionieren.Wie für Windows-Formulare fand ich es manchmal sehr langsam, wenn ich mit GDi arbeite, aber vielleicht habe ich gerade etwas falsch gemacht. Das Mono-Team behauptet jedoch, dass es Windows-Formulare vollständig unterstützt.

Eine weitere Sache, die es zu erwähnen lohnt. Es ist wirklich schwierig, eine Cross-Plattform-Anwendung zu schreiben, die ohne die Verwendung einiger nativer OS-Funktionen nicht hart wird. Ich denke, man sollte immer eine Möglichkeit in Betracht ziehen, einige zusätzliche OS-spezifische Module zu schreiben, um eine enge Integration mit dem zugrundeliegenden Betriebssystem zu ermöglichen und einige coole Sachen zu nutzen (wie eine tolle Toolbar in OSX). Sie sollten auch nicht vergessen, dass die Menschen zu anderen Look verwendet werden & fühlen auf verschiedenen Betriebssystemen

Verwandte Themen