Is.NET платформа независимая?

.NET-это независимая от языка платформа.

но является ли он независимым от платформы ? Как ?

изменить : Я слышал, .NET 4.0 разработан с учетом независимости plateform ! Ну, надеюсь, он может захватить Java, если это так !

изменить : Ответ зависит от того, как мы определяем "платформу", например .NET для платформы windows и Mono для Java.

но, вопрос в том, не имеем ли мы общую платформу разработки, которая независима от ОС !

связана ли независимость ОС с независимостью платформы ?

14 ответов


Это действительно вопрос того, как вы определяете "платформу".

например. .NET не зависит от платформы, пока платформа .NET, так же как Java не зависит от платформы, пока платформа Java. То есть .NET (и Java) are, частично, платформы сами по себе (CLR, JVM). Пока существует реализация этой платформы, доступная для данной физической платформы, Да, вы можете запускать скомпилированный код на ней независимо.

в конец, "независимость от платформы", как "написать однажды, запускать везде", "маркетинг". Но на практике в настоящее время существуют реализации JVM для гораздо более конкретных платформ, чем .NET (хотя такие инициативы, как моно-проекты, направлены на изменение этого).


чтобы ответить на этот вопрос, я считаю, что сначала нужно сделать четкое различие между CLI и .NET:

  • на командной строки (сокращенно Инфраструктура Общего Языка) является стандартом, и как таковой он предназначен, чтобы быть в основном . Здесь платформа относится к базовой компьютерной архитектуре, включая операционную систему.

    пока возможно что стандарт требует некоторого вещи, которые невозможно реализовать на всех архитектурах (я имею в виду очень ограниченные платформы, такие как встроенные системы), но их можно рассматривать как крайние случаи.

  • .NET является основной реализацией Microsoft CLI и работает только на системах Windows. Поэтому .Net-это не.

    Обновление (Август 2015): в конце 2014 года Microsoft объявила, что планирует постепенно части .NET Framework с открытым исходным кодом (особенно те части, которые относятся к серверным приложениям). В результате.NET Core клянусь .NET Foundation.

  • .NET Core предназначен для кросс-платформенной реализации CLI.

  • моно также является реализацией CLI, но предназначен для работы на разных платформах, таких как Linux и Окна. Mono определенно более независим от платформы, чем .Сетка.


во-вторых, существует проблема двоичной совместимости выходных данных компилятора. Поскольку стандарт CLI определяет формат файла (форму исполняемых файлов PE) и промежуточный язык кода (называемый CIL), который будет использоваться для сборок, можно смешивать компоненты, записанные в VB.NET, C# и некоторые другие языки свободно, как только исходный код был скомпилирован в CIL.

в этом смысл, CLI (и с ним все его соответствующие реализации, такие как .NET) - это язык-независимая.

интересно, что вы можете скомпилировать что - то с помощью компиляторов Microsoft .NET, и из-за общего формата файла сборки, предписанного стандартом, вы должны иметь возможность использовать сборку в моно-проекте-и наоборот. В этом смысле .NET компилятор toolchain можно считать независимым от платформы , но не .NET . Помните, что .NET Framework также включает стандартную библиотеку, предназначенную для Windows (например, WPF).


принято от wiki:

  • нет. DotNet не является независимой от платформы.
  • Microsoft .NET работает в Windows изначально. Однако реализация с открытым исходным кодом Mono позволяет ей работать в системах с открытым исходным кодом. Однако он не поддерживает все классы .NET, поэтому не ожидайте, что там что-то будет работать полностью.
  • как вы все знаете, в .NET есть разные компиляторы, такие как для C# - CSC VB - VBC и т. д. После того, как ваш код будет соблюден, он будет преобразования в MSIL код, который является независимым. Этот код MSIL будет идти в CLR , и этот CLR зависит от платформы i.e для платформы Unix вы должны иметь UNIX-тип CLR, для Windows, как то же самое, поэтому мы можем сказать, что .NET-код не зависит от платформы.

Не уверен, что вы подразумеваете под своим вопросом, но если вы хотите знать, может ли приложение .NET работать на любой ОС, то ответ-нет.

.NET Framework предназначен только для некоторых операционных систем, таких как Windows. Другие проекты доступны для других платформ, таких как Mono на Linux.


существует кросс-платформенная реализация под названием "mono". Исходные версии .NET от Microsoft-это только Windows.

дополнительная информация о проекте mono:http://en.wikipedia.org/wiki/Mono_Project


DotNet не является независимым от платформы или может быть частично независимым, в то время как Java полностью платформа независимый из-за его JVM(виртуальной машины java). лучший пример для понимания независимости java u может запустить программу java в вашей" автомобильной " микроволновой печи, стиральной машине или на любом компьютере, если установлена JVM(виртуальная машина java). Байтовый код Java независим, это не имеет значения, пока мы использовали mac,windows, unix.


Mono является кросс-платформенной реализацией .NET, но не поддерживается Microsoft и отсутствует некоторая функциональность.


есть некоторые реализации .net на linux, возможно, на других системах также будут скомпилированы.
Это называется моно.


.Net отлично работает на MacOSX и Linux, пока вы придерживаетесь .Net 2.0. Некоторые новые функции, как LINQ и C# 3.0 и т. д. были выполнены. Вы должны учитывать, что пути к файлам, разрешения файлов и т. д. не работают на 100% аналогично на разных платформах.

забыл упомянуть, что я говорю о моно.


во время компиляции языков программирования .NET исходный код переводится в CIL-код, а не в объектный код платформы или процессора. CIL-это независимый от ЦП и платформы набор инструкций, который может быть выполнен в любой среде, поддерживающей инфраструктуру общего языка, такой как среда выполнения .NET в Windows или кросс-платформенная среда выполнения Mono. Теоретически это устраняет необходимость в распределении отдельных двоичных файлов для разных платформ и типов ЦП. Код CIL проверено на безопасность во время выполнения, обеспечивая лучшую безопасность и надежность, чем скомпилированные двоичные файлы. Процесс выполнения выглядит следующим образом: Исходный код преобразуется в общий промежуточный язык, эквивалентный CLI языку ассемблера для ЦП. Затем CIL собирается в байт-код и создается сборка .NET. При выполнении сборки .NET ее байт-код передается через JIT-компилятор среды выполнения для создания собственного кода. (Заблаговременная компиляция исключает этот шаг при запуске время.) Машинный код выполняется процессором компьютера. Однако Microsoft сделала несколько улучшений, которые работают на .NET, которые собраны специально для windows, оставляя Mono (его аналог на базе linux) намного дальше.


.NET зависит от платформы, потому что после написания кода он выполняется в код Microsoft Intermediate Language(MSIL), который не зависит от платформы, но является наполовину скомпилированным кодом, а затем Общеязыковая среда выполнения(CLR) преобразует его в код устройства i.e зависит от платформы.(MSIL отправляется в JIT через CLR. Во время выполнения все выделение памяти выполняется JIT.)


Как вы знаете, .NET использовал framework 4.0.Из-за этого написанный код(исходный код) преобразуется в байтовый код. Это преобразование выполняется через MSIL (промежуточный язык Microsoft).MSIL - это специальный тип компилятора, который компилирует исходный код в код выполнения. Который запускается или поддерживает любую платформу. Поэтому из-за использования MSIL .NET язык является кросс-платформенным языком.


.NET не зависит от платформы, так как он может быть запущен на более чем одной версии/вкус ОС (например: MONO работает различные версии .Net framework на многих популярных операционных системах. см. http://mono-project.com/Compatibility)


.Net известен как частично независимый от платформы, а не полностью независимый от platforn. Однако .Net поддерживает некоторые другие операционные системы, такие как win98, winnt, winserver 2000 и новая версия, а также linux. В той же ситуации clr недоступны для win95, что означает, что .net не может быть выполнен на win95. Поэтому мы можем сказать, .Net является частично независимым от платформы не полностью независимым от платформы.