Sparkies Antwort hat es verstanden, lassen Sie mich ein wenig ergänzen.
".NET ist plattformübergreifend" ist zu vieldeutig, da sich sowohl das Framework als auch die Welt, für die es ursprünglich erstellt wurde, geändert und weiterentwickelt haben.
Die kurze Antwort lautet:
Die zugrunde liegende Engine für .NET und seine Derivate, der Common Language Infrastructure Standard, ist plattformübergreifend. Wenn Sie Ihren Code für mehrere Plattformen verwenden möchten, müssen Sie die Verwendung der richtigen APIs für die Bereitstellung auf der richtigen Plattform planen die beste Erfahrung auf jeder Plattform.
Die CLI-Familie hat den Ansatz "Einmal schreiben, überall ausführen" nicht ausprobiert, da die Unterschiede zwischen einem Telefon und einem Großrechner zu groß sind. Stattdessen hat sich ein Universum plattformspezifischer API- und Laufzeitfunktionen herausgebildet, mit denen Entwickler die richtigen Tools zum Erstellen großartiger Erlebnisse auf jeder Plattform erhalten.
Denken Sie daran: Programmierer sind nicht mehr auf Windows-PCs oder Unix-Server ausgerichtet. Die Welt ist mehr denn je von faszinierenden Plattformen wie PCs, Spielekonsolen, leistungsstarken Telefonen, Set-Top-Boxen, großen Servern und verteilten Computerclustern umgeben. Eine Einheitsgröße für alle Plattformen würde sich nur auf winzigen Geräten aufgebläht und auf großen Systemen zu schwach anfühlen .
Das .NET Framework-Produkt von Microsoft ist nicht plattformübergreifend, sondern kann nur unter Windows ausgeführt werden. Es gibt Variationen von .NET Framework von Microsoft, die auf anderen Systemen wie Windows Phone 7, XBox360 und Browsern über Silverlight ausgeführt werden. Bei allen handelt es sich jedoch um geringfügig unterschiedliche Profile.
Heutzutage können Sie mit .NET-basierten Technologien auf alle wichtigen Mainstream-Betriebssysteme, Telefone, Mobilgeräte, eingebetteten Systeme und Server zugreifen. Hier ist eine Liste, die zeigt, welche CLI-Implementierung Sie in jedem Fall verwenden würden (diese Liste ist nicht vollständig, sollte jedoch 99% der Fälle abdecken):
- x86- und x86-64-basierte PC-Computer:
- Ausführen von Windows -> Normalerweise führen Sie .NET oder Silverlight aus, aber Sie können hier auch Voll-Mono verwenden.
- Linux, BSD oder Solaris ausführen -> Sie führen Mono oder Silverlight vollständig aus
- MacOS X ausführen -> Sie führen Mono oder Silverlight vollständig aus
- Ausführen von Android -> Sie führen eine Mono / Android-Teilmenge aus
- ARM-Computer:
- Ausführen von Windows Phone 7: Sie führen Compact Framework 2010 aus
- Ausführen von Windows 6.5 und älter: Sie führen das alte Compact Framework aus
- Android-Geräte: Sie führen Mono / Android aus
- PowerPC-Computer:
- Sie können Full Mono für alle Linux-, BSD- oder Unix-Betriebssysteme ausführen
- Sie verwenden Embedded Mono für PS3, Wii oder andere Embedded-Systeme.
- Auf XBox360 führen Sie CompactFramework aus
- S390, S390x, Itanium, SPARC-Computer:
- Andere eingebettete Betriebssysteme:
- Sie führen .NET MicroFramework oder Mono mit dem mobilen Profil aus.
Abhängig von Ihren Bedürfnissen kann das oben Genannte ausreichen oder nicht. Es gibt kaum einen Quellcode, der überall ausgeführt werden kann. Beispielsweise wird XNA-Code nicht auf jedem Desktop ausgeführt, während .NET Desktop-Software nicht auf XNA oder dem Telefon ausgeführt wird. Normalerweise müssen Sie Änderungen an Ihrem Code vornehmen, um in anderen Profilen von .NET Framework ausgeführt zu werden. Hier sind einige der mir bekannten Profile:
- .NET 4.0-Profil
- Silverlight-Profil
- Windows Phone 7-Profil
- XBox360-Profil
- Mono-Core-Profil - folgt dem .NET-Profil und ist unter Linux, MacOS X, Solaris, Windows und BSD verfügbar.
- .NET Micro Framework
- Mono auf dem iPhone-Profil
- Mono auf Android-Profil
- Mono auf PS3-Profil
- Mono auf Wii-Profil
- Moonlight-Profil (kompatibel mit Silverlight)
- Erweitertes Moonlight-Profil (Silverlight + vollständiger .NET 4-API-Zugriff)
Jedes dieser Profile ist also ein bisschen anders, und das ist keine schlechte Sache. Jedes Profil ist so konzipiert, dass es auf die Host-Plattform passt und die sinnvollen APIs verfügbar macht. Entfernen Sie die nicht sinnvollen APIs.
Beispielsweise sind die APIs von Silverlight zur Steuerung des Host-Browsers auf dem Telefon nicht sinnvoll. Und Shader in XNA machen auf PC-Hardware keinen Sinn, für die die entsprechende Unterstützung fehlt.
Je schneller Sie erkennen, dass .NET keine Lösung ist, um den Entwickler von den zugrunde liegenden Funktionen der Hardware und der nativen Plattform zu isolieren, desto besser für Sie.
Allerdings sind einige APIs und Stacks auf mehreren Plattformen verfügbar. Beispielsweise kann ASP.NET unter Windows, Linux, Solaris und MacOS X verwendet werden, da diese APIs sowohl in .NET als auch in Mono vorhanden sind. ASP.NET ist auf einigen von Microsoft unterstützten Plattformen wie XBox oder Windows Phone 7 nicht verfügbar und wird auch auf anderen von Mono unterstützten Plattformen wie Wii oder iPhone nicht unterstützt.
Die folgenden Informationen sind erst ab dem 21. November korrekt und viele Dinge in der Mono-Welt werden sich wahrscheinlich ändern.
Die gleichen Prinzipien können auf andere Stacks angewendet werden. Eine vollständige Liste würde eine richtige Tabelle erfordern, von der ich keine Ahnung habe, wie sie hier dargestellt werden soll. Hier ist jedoch eine Liste von Technologien, die auf einer bestimmten Plattform möglicherweise nicht vorhanden sind. Sie können davon ausgehen, dass alles, was hier nicht aufgeführt ist, verfügbar ist.
Core Runtime Engine [überall]
- Reflection.Emit-Unterstützung [überall, außer WP7, CF, Xbox, MonoTouch, PS3]
- CPU SIMD-Unterstützung [Linux, BSD, Solaris, MacOS X; Bald PS3, MonoTouch und MonoDroid]
- Fortsetzungen - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- Entladen der Baugruppe [Nur Windows]
- VM-Injection [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Generika [einige Einschränkungen für PS3 und iPhone].
Sprachen
- C # 4 [überall]
- C # -Compiler als Dienst (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [überall ausgeführt, WP7, CF, Xbox, MonoTouch, PS3]
- IronPython [überall, ausführt WP7, CF, Xbox, MonoTouch, PS3]
- F # [überall ausführen WP7, CF, Xbox, MonoTouch, PS3]
Server-Stacks
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [überall]
- LINQ to SQL [überall]
- Entity Framework [überall]
- Kern XML-Stack [überall]
- XML-Serialisierung [überall, außer WP7, CF, Xbox]
- LINQ to XML (überall)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; unter Linux, MacOS und Solaris benötigt RabbitMQ]
- .NET 1 Enterprise Services [Nur Windows]
- WCF [vollständig unter Windows; kleine Teilmenge unter Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid]
- Windows-Workflow [Nur Windows]
- Cardspace-Identität [Nur Windows]
GUI-Stapel
- Silverlight (Windows, Mac, Linux - mit Moonlight)
- WPF (nur Windows)
- Gtk # (Windows, Mac, Linux, BSD)
- Windows.Forms (Windows, Mac, Linux, BSD)
- MonoMac - native Mac-Integration (nur Mac)
- MonoTouch - native iPhone-Integration (nur iPhone / iPad)
- MonoDroid - native Android-Integration (nur Android)
- Media Center-APIs - Nur Windows
- Unordnung (Windows und Linux)
Grafikbibliotheken
- GDI + (Windows, Linux, BSD, MacOS)
- Quarz (MacOS X, iPhone, iPad)
- Kairo (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)
Mono-Bibliotheken - Cross Platform, können in .NET verwendet werden, müssen jedoch manuell erstellt werden
- C # 4-Compiler als Dienst
- Cecil - CIL Manipulation, Workflow, Instrumentierung von CIL, Linkers
- RelaxNG Bibliotheken
- Mono.Data. * Datenbankanbieter
- Vollständiges System.Xaml (zur Verwendung in Setups, in denen .NET den Stack nicht anbietet)
MonoTouch bedeutet, dass Mono auf dem iPhone ausgeführt wird. MonoDroid bedeutet, dass Mono unter Android ausgeführt wird. PS3- und Wii-Anschlüsse stehen nur qualifizierten Entwicklern von Sony und Nintendo zur Verfügung.
Ich entschuldige mich für die mangelnde Formalität.