.NET Base: [FAQ] Wie kann ich plattformunabhängig programmieren? - .NET Base

Zum Inhalt wechseln

Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich

[FAQ] Wie kann ich plattformunabhängig programmieren?

Geschrieben 13. Apr 2010 - 18:47 (#1) Mitglied ist offline   Sunny 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 64
  • Registriert: 07. Apr. 10
  • Wohnort: Wien
  • OS: Arch Linux | Windows 7 Professional
  • IDE: Geany, Code::Blocks, Visual Studio 2008 Professional

Was bedeutet 'plattformunabhängig' ?

Plattformunabhängigkeit bedeutet, dass ein Programm auf verschiedenen Plattformen bzw. Betriebssysteme lauffähig ist. In C,C++ bzw. anderen plattformunabhängigen Sprachen sind öfters (mehrere) Veränderungen notwendig um das Programm auf die Zielplattform zu portieren. Diesen Vorgang nennt man Portierung, die Portabilität beschreibt nicht nur die Plattformunabhängigkeit sondern auch den Aufwand um Programm A nach Programm B zu portieren.


Ist .NET plattformunabhängig ?

Zitat

Theoretisch ja, praktisch Ja und Nein... Wie jetzt?

Jedes geschriebene .NET Programm wird zuerst in Bytecode umgewandelt. Dieser Bytecode ist plattformunabhängig und vergleichbar mit dem Bytecode von Java. Erst dann wenn man das Programm ausführt, wird der Bytecode zur Laufzeit in Maschinencode übersetzt, dafür ist das .NET Framework zuständig. Jetzt kommt der Hacken an der Geschichte:
Da es aber kein offizielles .NET Framework für Linux/MacOS gibt, ist die Antwort auf die Frage: Nein.

Microsoft selbst hatte ein Projekt, welches .NET Programmen erlaubt hat auf verschiedenen Plattformen zu rennen. Jedoch ist das Projekt an einem unbekannten Grund gescheitert.


Bedeutet das jetzt, dass .NET nicht plattformunabhängig ist ?

Hier kommt das oben genannte Ja ins Spiel. Es gibt ein Open Source-Projekt, welche sich eine Implementierung, die auf dem ECMA-Standard als Grundlage genommen hat.

Der ECMA-Standard (European Computer Manufacturers Association) ist eine private und internationale Normungsorganisation, die viele Standardisierungen enthält. Darunter die Standardisierung von .NET und C#.

Zitat

Das fortschrittlichste Projekt ist MONO.


MONO...

...unterstützt:
Angehängte Datei  Mono_compatibility.PNG (29,68K)
Anzahl der Downloads: 27
... wird in der nächsten Version:
Angehängte Datei  Mono_coming.PNG (1,29K)
Anzahl der Downloads: 23
unterstützen.

Für Linux-User: Mono benutzt GTK+ bzw. GTK# für die Erstellung der Windows.Forms.

Weitere Informationen über das MONO-Projekt.

Auf der Wikipedia steht, dass es noch das Projekt dotGNU gibt, aber dieses ist seit 4(2006) Jahren von MONO abgelöst worden.


Was muss ich beim Schreiben eines plattformunabhängigen Programms beachten ?


An dieser Stelle möchte ich ein Danke an mikeb69 richten, der mich darauf hingewiesen hat.

Leider akzeptiert das MONO-Projekt keine Backslashes in den Pfaden. Das bedeutet, dass ihr die Backslashes '\' in Forwardslashes '/' umwandeln müsst. Denn Linux bzw. Unix Systeme sehen "MeinOrdner\MeineDatei.txt" nicht als: Im Ordner "MeinOrdner" befindet sich die Datei "MeineDatei.txt". Der Backslash ('\') ist in einem Dateinamen erlaubt! Folglich würde das Linux bzw. Unix System nach einer Datei suchen, deren Name "MeinOrdner\MeineDatei" heißt.
.NET bietet in dieser Hinsicht ein paar Funktionen aus der Klasse Path.

Desweiteren ist es nicht möglich die WinAPI in eurem Programm explizit aufzurufen. MONO unterstützt nur das .NET Framework bzw. hält sich nur am CLI und unterstützt nicht die Win32-API. Für solche Funktionen müsst ihr euch eine plattformunabhängige C#/VB.Net-Library suchen.

MONO erlaubt die Benutzung von Registry-Einträgen!

Linux und Unix sind case-sensitiv. Das bedeutet, dass das Datensystem zwischen Groß/Kleinschreibung unterscheidet. Wenn ihr beispielsweise im Programm geschrieben habt, dass die Datei "Log.txt" als Logging-Datei benutzt werden soll, dann muss auch eine Datei vorhanden sein, die "Log.txt" heißt und nicht "LOG.txt". Denn das sind 2 unterschiedliche Dateien.

MONO erlaubt nicht die Benutzung des Namespaces Enterprise.Services, da dieser als deprecated (veraltet) gilt.

MONO bietet keine COM-Schnittstelle an. Wenn man eine umbedingt haben will, muss man einen Wrapper mit P/Invoke schreiben.

MONO erlaubt keine Programme, welche Steuerelemente/Forms in mehreren Threads erstellen. ALLE Steuerelemente/Forms müssen in einem einzelnen Thread ausgelagert werden.

MONO bietet nicht das alte ASP an. Sondern nur ASP.NET.

MONO bietet ASP.NET Webservices an.

Mit 'erlaubt' ist gemeint, dass MONO euer Programm laufen lässt, aber euer Programm wird undefiniert arbeiten!

Sunny

Dieser Beitrag wurde von Sunny bearbeitet: 13. Apr 2010 - 21:03

1

Geschrieben 13. Apr 2010 - 21:05 (#2) Mitglied ist offline   Sunny 

  • Fortgeschrittener
  • PIPPIPPIP
  • Gruppe: Mitglieder
  • Beiträge: 64
  • Registriert: 07. Apr. 10
  • Wohnort: Wien
  • OS: Arch Linux | Windows 7 Professional
  • IDE: Geany, Code::Blocks, Visual Studio 2008 Professional

Was muss ich beim Schreiben eines plattformunabhängigen Programms beachten ?

Der Abschnitt wurde um ein paar Einträge erweitert.


Sunny
0

Thema verteilen:


Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich


1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0


Enter your sign in name and password


Sign in options
Mit OpenID anmelden Mit Windows Live anmelden   Or sign in with these services