La réponse de Sparkie comprit , laissez-moi compléter un peu.
".NET est multi-plateforme" est une déclaration trop ambiguë, car le cadre et le monde pour lesquels il avait été créé ont changé et évolué.
La réponse courte est:
Le moteur sous-jacent qui alimente .NET et ses dérivés, le Common Language Infrastructure Standard, est multi-plateforme et, si vous souhaitez que votre code soit utilisé sur plusieurs plates-formes, vous devez planifier l'utilisation des API appropriées sur la plate-forme appropriée pour fournir la meilleure expérience sur chaque plate-forme.
La famille CLI n’a pas essayé l’approche «Une seule fois, n’importe où», car les différences entre un téléphone et un ordinateur central sont trop grandes. Au lieu de cela, un univers d’API et de fonctionnalités d’exécution spécifiques à chaque plate-forme est apparu pour donner aux développeurs les outils nécessaires pour créer de belles expériences sur chaque plate-forme.
Pensez-y: les programmeurs ne ciblent plus les PC Windows ni les serveurs Unix. Le monde, plus que jamais, est entouré de plates-formes fascinantes allant des PC aux consoles de jeux en passant par les téléphones puissants, les décodeurs, les gros serveurs et les grappes distribuées de machines. Une taille unique sur toutes les plates-formes ne ferait que se gonfler sur de petits appareils et se sentir moins puissante sur de grands systèmes .
Le produit .NET Framework de Microsoft n'est pas multiplateforme, il ne fonctionne que sous Windows. Il existe des variantes du .NET Framework de Microsoft qui s'exécutent sur d'autres systèmes, tels que Windows Phone 7, le XBox360 et les navigateurs via Silverlight, mais il s'agit tous de profils légèrement différents.
Aujourd'hui, vous pouvez cibler tous les principaux systèmes d'exploitation, téléphones, appareils mobiles, systèmes intégrés et serveurs avec les technologies .NET. Voici une liste qui indique quelle implémentation de la CLI vous utiliseriez dans chaque cas (cette liste n’est pas exhaustive, mais devrait couvrir 99% des cas):
- Ordinateurs PC basés sur x86 et x86-64:
- sous Windows -> Généralement, vous utilisez .NET ou Silverlight, mais vous pouvez également utiliser le mode Mono complet ici.
- sous Linux, BSD ou Solaris -> Vous utilisez Full Mono ou Silverlight
- sous MacOS X -> Vous utilisez Full Mono ou Silverlight
- sous Android -> Vous utilisez un sous-ensemble Mono / Android
- Ordinateurs ARM:
- Exécution de Windows Phone 7: vous exécutez Compact Framework 2010
- Exécution de Windows 6.5 et versions antérieures: vous exécutez l’ancien Compact Framework
- Appareils Android: vous utilisez Mono / Android
- Ordinateurs PowerPC:
- Vous utilisez Full Mono pour les systèmes d'exploitation Linux, BSD ou Unix complets
- Vous utilisez Mono intégré pour PS3, Wii ou d'autres systèmes intégrés.
- Sur XBox360, vous exécutez CompactFramework
- Ordinateurs S390, S390x, Itanium, SPARC:
- Autres systèmes d'exploitation embarqués:
- Vous exécutez .NET MicroFramework ou Mono avec le profil mobile.
En fonction de vos besoins, ce qui précède peut suffire ou non. Vous aurez à peine le même code source à exécuter partout. Par exemple, le code XNA ne fonctionnera pas sur tous les ordinateurs de bureau, alors que le logiciel .NET Desktop ne fonctionnera pas sur XNA ou sur le téléphone. Vous devez généralement modifier votre code pour pouvoir l'exécuter dans d'autres profils du .NET Framework. Voici quelques-uns des profils que je connais:
- Profil .NET 4.0
- Profil Silverlight
- Profil Windows Phone 7
- Profil XBox360
- Mono core Profile - suit le profil .NET et est disponible sous Linux, MacOS X, Solaris, Windows et BSD.
- .NET Micro Framework
- Mono sur iPhone
- Mono sur le profil Android
- Mono sur PS3 Profile
- Mono sur le profil Wii
- Profil Moonlight (compatible avec Silverlight)
- Profil étendu Moonlight (Silverlight + accès complet à l'API .NET 4)
Chacun de ces profils est donc légèrement différent et ce n’est pas une mauvaise chose. Chaque profil est conçu pour s'adapter à sa plate-forme hôte et exposer les API qui ont du sens, ainsi que celles qui ne le sont pas.
Par exemple, les API de Silverlight pour contrôler le navigateur de l'hôte n'ont pas de sens sur le téléphone. Et les shaders sous XNA n’ont aucun sens sur un matériel PC dépourvu du support équivalent.
Plus tôt vous vous rendrez compte que .NET n'est pas une solution pour isoler le développeur des capacités sous-jacentes du matériel et de la plate-forme native, mieux vous serez.
Cela dit, certaines API et piles sont disponibles sur plusieurs plates-formes. Par exemple, ASP.NET peut être utilisé sous Windows, sous Linux, sous Solaris et sous MacOS X car ces API existent à la fois sous .NET et Mono. ASP.NET n'est pas disponible sur certaines des plates-formes prises en charge par Microsoft, telles que XBox ou Windows Phone 7, ni sur les autres plates-formes prises en charge par Mono, telles que la Wii ou l'iPhone.
Les informations suivantes ne sont correctes qu'à compter du 21 novembre et de nombreux éléments du monde Mono vont probablement changer.
Les mêmes principes peuvent être appliqués à d'autres piles, une liste complète nécessiterait un tableau approprié, que je ne sais pas comment présenter ici, mais voici une liste de technologies qui pourraient ne pas être présentes sur une plate-forme particulière. Vous pouvez supposer que tout ce qui n'est pas répertorié ici est disponible (n'hésitez pas à m'envoyer les modifications apportées aux éléments que j'ai manqués):
Core Runtime Engine [partout]
- Prise en charge de Reflection.Emit [partout, sauf WP7, CF, Xbox, MonoTouch, PS3]
- Prise en charge du processeur SIMD [Linux, BSD, Solaris, MacOS X; Bientôt PS3, MonoTouch et MonoDroid]
- Continuations - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- Assemblage Déchargement [Windows uniquement]
- Injection de machine virtuelle [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Génériques [quelques limitations sur la PS3 et l'iPhone].
Les langues
- C # 4 [partout]
- Compilateur C # en tant que service (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [partout, sauf WP7, CF, Xbox, MonoTouch, PS3]
- IronPython [partout, sauf WP7, CF, Xbox, MonoTouch, PS3]
- F # [partout, sauf WP7, CF, Xbox, MonoTouch, PS3]
Piles de serveurs
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [partout]
- LINQ to SQL [partout]
- Entity Framework [partout]
- Pile XML principale [partout]
- Sérialisation XML [partout, sauf WP7, CF, Xbox)
- LINQ to XML (partout)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; RabbitMQ sous Linux, MacOS et Solaris]
- .NET 1 Enterprise Services [Windows uniquement]
- WCF [complet sous Windows; petit sous-ensemble sur Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid]
- Flux de travail Windows [Windows uniquement]
- Identité de l'espace de jeu
Piles d'interface graphique
- Silverlight (Windows, Mac, Linux - avec Moonlight)
- WPF (Windows uniquement)
- Gtk # (Windows, Mac, Linux, BSD)
- Windows.Forms (Windows, Mac, Linux, BSD)
- MonoMac - Intégration Mac native (Mac uniquement)
- MonoTouch - Intégration iPhone native (iPhone / iPad uniquement)
- MonoDroid - Intégration Android native (Android uniquement)
- API Media Center - Windows uniquement
- Clutter (Windows et Linux)
Bibliothèques graphiques
- GDI + (Windows, Linux, BSD, MacOS)
- Quartz (MacOS X, iPhone, iPad)
- Cairo (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)
Mono Libraries - Cross Platform, peut être utilisé en .NET mais nécessite une construction manuelle
- Compilateur C # 4 en tant que service
- Cecil - CIL Manipulation, workflow, instrumentation de CIL, Linkers
- Librairies RelaxNG
- Mono.Data. * Fournisseurs de bases de données
- Full System.Xaml (à utiliser dans les configurations où .NET ne propose pas la pile)
MonoTouch signifie Mono fonctionnant sur iPhone; MonoDroid signifie Mono fonctionnant sur Android; Les ports PS3 et Wii sont uniquement disponibles pour les développeurs qualifiés Sony et Nintendo.
Je m'excuse pour le manque de formalité.