Відповідь Спаркі отримала це, дозвольте мені трохи доповнити.
".NET - крос-платформа" - це занадто неоднозначне твердження, оскільки і рамки, і світ, для якого він був створений спочатку, змінилися і еволюціонували.
Коротка відповідь:
Основний двигун, що використовує .NET та його похідні, загальний стандарт інфраструктури мови, є кросплатформенним, і як би ви хочете змусити ваш код перейти на кілька платформ, вам потрібно планувати використання правильних API на правій платформі для доставки найкращий досвід на кожній платформі.
Сім'я CLI не пробувала підходу "Написати один раз, запустити будь-де", оскільки відмінності від телефону до мейнфрейму занадто великі. Натомість з'явився універсал API та функцій виконання, які залежать від платформи, щоб надати розробникам потрібні інструменти для створення чудового досвіду на кожній платформі.
Подумайте: програмісти більше не орієнтуються на ПК з Windows або Unix-сервери. Зараз світ, як ніколи, оточений захоплюючими платформами від ПК, ігрових консолей, потужних телефонів, телевізорів, великих серверів та розподілених кластерів машин. Одномісний розмір на всій платформі міг би просто відчувати себе роздутим на крихітних пристроях та відчувати себе недостатнім у великих системах .
Продукт Microsoft .NET Framework не є платформою, він працює лише в Windows. Існують варіанти .NET Framework від Microsoft, які працюють в інших системах, таких як Windows Phone 7, XBox360 та браузерах через Silverlight, але всі вони трохи відрізняються за профілями.
Сьогодні ви можете орієнтуватися на всі основні ОС, телефон, мобільний пристрій, вбудовану систему та сервер за допомогою технологій на основі .NET. Ось список, який показує, яку реалізацію CLI ви використовували б у кожному випадку (цей список не є вичерпним, але повинен охоплювати 99% випадків):
- ПК на базі x86 та x86-64:
- під керуванням Windows -> Зазвичай ви запускаєте .NET або Silverlight, але тут також можна використовувати повний Mono.
- під управлінням Linux, BSD або Solaris -> Ви запускаєте повний Mono або Silverlight
- під керуванням MacOS X -> Ви запускаєте повний Mono або Silverlight
- працює Android -> Ви запускаєте Mono / підмножину Android
- ARM-комп’ютери:
- Запуск Windows Phone 7: ви запускаєте Compact Framework 2010
- Запуск Windows 6.5 і новіших версій: ви запускаєте старий Compact Framework
- Android пристрої: ви запускаєте Mono / Android
- Комп'ютери PowerPC:
- Ви запускаєте повне Mono для повних операційних систем Linux, BSD або Unix
- Ви запускаєте вбудований Mono для PS3, Wii або інших вбудованих систем.
- На XBox360 ви запускаєте CompactFramework
- Комп'ютери S390, S390x, Itanium, SPARC:
- Ви запускаєте повний Mono
- Інші вбудовані операційні системи:
- Ви запускаєте .NET MicroFramework або Mono за допомогою мобільного профілю.
Залежно від ваших потреб вищезазначеного може бути достатньо чи ні. Ви навряд чи отримаєте той самий вихідний код, який можна працювати всюди Наприклад, код XNA не буде працювати на кожному робочому столі, тоді як .NET Desktop не буде працювати на XNA або телефоні. Зазвичай потрібно внести зміни в код, щоб запустити їх в інших профілях .NET Framework. Ось кілька профілів, про які я знаю:
- Профіль .NET 4.0
- Профіль Silverlight
- Профіль Windows Phone 7
- Профіль XBox360
- Mono core Profile - відповідає профілю .NET і доступний у Linux, MacOS X, Solaris, Windows та BSD.
- .NET Micro Framework
- Моно на профілі iPhone
- Моно в профілі Android
- Моно на PS3 профіль
- Моно на профілі Wii
- Профіль місячного світла (сумісний із Silverlight)
- Розширений профіль Moonlight (Silverlight + повний доступ до API .NET 4)
Тож кожен із цих профілів насправді трохи інший, і це не погано. Кожен профіль призначений для розміщення на його хост-платформі та відкриття API, які мають сенс, та видалення тих, які не мають сенсу.
Наприклад, API Silverlight для управління хост-браузером не мають сенсу в телефоні. А шейдери в XNA не мають сенсу для апаратного забезпечення ПК, якому не вистачає еквівалентної підтримки.
Чим раніше ви зрозумієте, що .NET не є рішенням ізолювати розробника від основних можливостей апаратного забезпечення та рідної платформи, тим краще вам буде.
По-перше, деякі API та стеки доступні на багатьох платформах, наприклад, ASP.NET можна використовувати в Windows, в Linux, Solaris, на MacOS X, оскільки такі API існують і в .NET, і в Mono. ASP.NET не доступний на деяких підтримуваних Майкрософт платформах, таких як XBox або Windows Phone 7, і не підтримується ні на інших платформах, які Mono підтримує, як Wii або iPhone.
Наступна інформація правильна лише з 21 листопада, і багато речей у світі Моно, ймовірно, зміниться.
Ті ж принципи можуть бути застосовані і до інших стеків, для повного списку потрібна відповідна таблиця, яку я не маю уявлення про те, як тут представити, але ось список технологій, які можуть бути відсутні на певній платформі. Ви можете припустити, що все, що не вказано тут, доступне (сміливо надсилайте мені правки для речей, які я пропустив):
Основний двигун виконання [скрізь]
- Reflection.Emit Support [всюди, крім WP7, CF, Xbox, MonoTouch, PS3]
- Підтримка CPU SIMD [Linux, BSD, Solaris, MacOS X; Незабаром PS3, MonoTouch та MonoDroid]
- Продовження - Mono.Tasklets [Linux, BSD, Solaris, MacOS, PS3, Wii]
- Вивантаження з монтажу [лише для Windows]
- Інжекція VM [Linux, BSD, MacOS X, Solaris]
- DLR [Windows, Linux, MacOS X, Solaris, MonoDroid]
- Загальна інформація [деякі обмеження для PS3 та iPhone].
Мови
- C # 4 [скрізь]
- Компілятор C # як послуга (Linux, MacOS, Solaris, BSD, Android)
- IronRuby [скрізь, execpt WP7, CF, Xbox, MonoTouch, PS3]
- IronPython [скрізь, execpt WP7, CF, Xbox, MonoTouch, PS3]
- F # [скрізь, крім WP7, CF, Xbox, MonoTouch, PS3]
Серверні стеки
- ASP.NET [Windows, Linux, MacOS, BSD, Solaris]
- ADO.NET [скрізь]
- LINQ в SQL [всюди]
- Entity Framework [скрізь]
- Core XML стек [скрізь]
- XML-серіалізація [скрізь, крім WP7, CF, Xbox)
- LINQ - XML (скрізь)
- System.Json [Silverlight, Linux, MacOS, MonoTouch, MonoDroid]
- System.Messaging [Windows; для Linux, MacOS та Solaris потрібен RabbitMQ]
- .NET 1 Enterprise Services [лише для Windows]
- WCF [завершено в Windows; невеликий підмножина на Silverlight, Solaris, MacOS, Linux, MonoTouch, MonoDroid]
- Windows Workflow [лише для Windows]
- Ідентифікація карткового простору [лише для Windows]
Графічні стеки
- Silverlight (Windows, Mac, Linux - з Moonlight)
- WPF (лише для Windows)
- Gtk # (Windows, Mac, Linux, BSD)
- Форми Windows. (Windows, Mac, Linux, BSD)
- MonoMac - інтеграція до Native Mac (лише для Mac)
- MonoTouch - Інтеграція Native iPhone (лише iPhone / iPad)
- MonoDroid - Інтеграція на родних Android (лише для Android)
- API Media Center - лише для Windows
- Clutter (Windows та Linux)
Графічні бібліотеки
- GDI + (Windows, Linux, BSD, MacOS)
- Кварц (MacOS X, iPhone, iPad)
- Каїр (Windows, Linux, BSD, MacOS, iPhone, iPad, MacOS X, PS3, Wii)
Монотехнічні бібліотеки - перехресна платформа, можна використовувати в .NET, але вимагати побудови вручну
- Компілятор C # 4 як послуга
- Cecil - CIL Маніпуляція, робочий процес, інструментальне обладнання CIL, Linkers
- Бібліотеки RelaxNG
- Провайдерів баз даних Mono.Data. *
- Full System.Xaml (для використання в установках, де .NET не пропонує стек)
MonoTouch означає Mono працює на iPhone; MonoDroid означає Mono, що працює на Android; Порти PS3 та Wii доступні лише кваліфікованим розробникам Sony та Nintendo.
Прошу вибачення за відсутність формальності.