Ответ Sparkie понял, позвольте немного дополнить.
".NET является кроссплатформенным" - это слишком двусмысленное заявление, поскольку и фреймворк, и мир, для которого он изначально создавался, изменились и эволюционировали.
Короткий ответ таков:
Базовый движок, на котором работает .NET и его производные, Common Language Infrastructure Standard, является кроссплатформенным, и если вы хотите, чтобы ваш код работал на нескольких платформах, вам нужно планировать использование правильных API на правильной платформе, чтобы обеспечить наилучший опыт на каждой платформе.
Семейство CLI не пыталось использовать подход "Write Once, Run Anywhere", поскольку различия между телефоном и мейнфреймом слишком велики. Вместо этого появилась целая вселенная API и функций среды выполнения, специфичных для каждой платформы, чтобы дать разработчикам нужные инструменты для создания отличного опыта на каждой платформе.
Подумайте только: программисты больше не ориентируются на ПК с Windows или Unix-серверы. Сейчас мир, как никогда ранее, окружен интересными платформами - от ПК, игровых консолей, мощных телефонов, телевизионных приставок до больших серверов и распределенных кластеров машин. Единая для всех платформа будет просто раздута на крошечных устройствах и недостаточно мощна на больших системах.
Продукт .NET Framework от Microsoft не является кроссплатформенным, он работает только на Windows. Существуют варианты .NET Framework от Microsoft, которые работают на других системах, таких как Windows Phone 7, XBox360 и браузеры через Silverlight, но все они немного отличаются по профилю.
Сегодня вы можете использовать технологии на базе .NET для всех основных ОС, телефонов, мобильных устройств, встроенных систем и серверов. Вот список, который показывает, какую реализацию CLI вы будете использовать в каждом случае (этот список не является полным, но должен охватывать 99% случаев):
В зависимости от ваших потребностей вышеперечисленного может быть достаточно или нет. Вы вряд ли получите одинаковый исходный код, который будет работать везде. Например, код XNA не будет работать на каждом настольном компьютере, а программы .NET Desktop не будут работать на XNA или телефоне. Как правило, вам нужно внести изменения в свой код, чтобы он работал в других профилях .NET Framework. Вот некоторые из известных мне профилей:
Таким образом, каждый из этих профилей на самом деле немного отличается, и это не плохо. Каждый профиль разработан таким образом, чтобы соответствовать своей платформе и раскрывать те API, которые имеют смысл, и удалять те, которые не имеют смысла.
Например, API Silverlight для управления основным браузером не имеет смысла на телефоне. А шейдеры в XNA не имеют смысла на аппаратном обеспечении ПК, которое не имеет эквивалентной поддержки для них.
Чем раньше вы поймете, что .NET - это не решение для изоляции разработчика от базовых возможностей оборудования и родной платформы, тем лучше вам будет.
Тем не менее, некоторые API и стеки доступны на нескольких платформах, например, ASP.NET можно использовать на Windows, Linux, Solaris, MacOS X, потому что эти API существуют как в .NET, так и в Mono. ASP.NET недоступен на некоторых поддерживаемых Microsoft платформах, таких как XBox или Windows Phone 7, и не поддерживается на других платформах, поддерживаемых Mono, таких как Wii или iPhone.
Следующая информация верна только по состоянию на 21 ноября, и многое в мире Mono, вероятно, изменится.
Те же принципы могут быть применены и к другим стекам, полный список потребует соответствующей таблицы, которую я не представляю, как представить здесь, но вот список технологий, которые могут отсутствовать на конкретной платформе. Вы можете предположить, что все, что здесь не перечислено, доступно (не стесняйтесь присылать мне правки, если я что-то упустил):
Core Runtime Engine [везде]
Языки
Серверные стеки
Стеки GUI
Графические библиотеки
Библиотеки Mono - кроссплатформенные, могут быть использованы в .NET, но требуют ручной сборки
MonoTouch означает Mono, работающий на iPhone; MonoDroid означает Mono, работающий на Android; порты для PS3 и Wii доступны только квалифицированным разработчикам Sony и Nintendo.
Прошу прощения за отсутствие формальностей.