В чем смысл Mono в Windows

Это может быть глупый вопрос...но я просто смотрел в проект Mono, и у них есть раздел об установке Mono на Windows. Но, поскольку Windows, очевидно, уже имеет .NET runtime, может ли кто-нибудь сказать мне, в чем именно смысл иметь Mono для Windows? Это помогает в кросс-платформенной разработке или что-то в этом роде?

12 ответов


поскольку Mono не реализует .Net 100% так же, как MS .Net Framework, хорошо, что вы можете протестировать Mono без необходимости запуска в Linux. Также Mono имеет привязки для создания форм с GTK, которые MS не поддерживает.


есть несколько функций Mono, которые .NET не имеет.

Mono высоки модульно. Вы можете разбить его на мелкие кусочки и только развернуть ровно те части, которые вам нужны. Не нужна система.В XML? Ладно, все кончено.

Mono встраивается. Вы можете разместить его внутри приложения C/C++, чтобы позволить пользователям создавать сценарии из безопасной управляемой изолированной среды. Самый известный пример этого-mod_mono, который размещает Mono внутри Apache веб-сервер, и как ASP.NET реализуется в Mono, например. Эта функция отлично сочетается с упомянутой выше модульностью.

Это уже упоминалось: статическая связь. и идет вместе с modularization.

компилятор как Служба-это еще один. Андерс Хейльсберг уже давно говорит об этом!--3-->долго времени, и может быть, просто, возможно, он будет готов к C# 5.0. Ну, Mono уже есть он и на самом деле имел это в течение многих лет.

Мигель де Икаса, ведущий разработчик Mono также имеет инициативу, которую он называет "объятия и Extend.NET", который расширяет CLI способами, которые (в настоящее время) невозможны с другими реализациями CLI (включая .NET). До сих пор, объятия и Extend.NET имеет три особенности.

Mono.Simd, который дает безопасный и контролируемый доступ к инструкциям SIMD базового процессора (например, SSE на Intel или AltiVec на PowerPC). Использованный для игр и Графика.

64-битные индексы массива, которые разрешены спецификацией ECMA, но Mono-единственная виртуальная машина, которая фактически предоставляет их. Используется в суперкомпьютерах.

и совсем недавно, продолжения. На самом деле это первый раз, когда Mono выходит за рамки спецификации: индексы длинного массива совершенно действительны в соответствии со спецификацией и Mono.Simd также работает на каждой CLI-совместимой реализации (хотя очень S-L-O-W), но моно.Tasklet должен специальная поддержка от виртуальной машины, которая не является частью CLI или .Сеть. Это используется для игровой логики и, например, во второй жизни.


  • Mono does some things the .Net doesn't. например, mono поддерживает статическую компоновку, чтобы вы могли создавать, компилировать и распространять приложение, не требуя отдельного установщика времени выполнения. Если вы создали приложение, чтобы полагаться на mono, чтобы быть кросс-платформенным, есть несколько различий, и поэтому использование mono в Windows является большей гарантией совместимости.

  • .Net does some things that mono doesn't. в BCL есть несколько мест, которые еще не портированы для mono. Если вы хотите приложение, которое будет работать на mac / linux вы, вероятно, хотите сначала разработать для mono, даже если вы делаете работу в windows.


Если вы хотите разработать кросс-платформенное приложение на C#, то использование реализации Microsoft не самая умная вещь, так как нет полностью совместимой Альтернативы для других платформ.

таким образом, использование Mono в Windows для разработки приложений гарантирует, что у вас будет мало проблем с переносом его на другую ОС (при условии, что вы избегаете других ям, таких как P/Invoke).


из моно технический FAQ:

почему поддержка Windows, когда вы можете запустить реальную вещь?

существуют различные причины:

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

Это помогает нам, так как мы можем изолировать проблемы в моногородах по разбиение проблемы (это проблема времени выполнения или проблема ОС?).

около половины участников Mono являются разработчиками Windows. У них есть много различных причин для внося вклад в усилия, и мы очень важно, чтобы эти разработчики запускают среду выполнения в Windows не заставляя их использовать новый операционная система.

Mono не сильно изменяет реестр windows, обновляет системные библиотеки DLL, установка DLL в Windows / System32 путь.

Это помогает Разработчики на базе Windows, чтобы проверить свой код под Mono перед развертыванием в Linux.

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


некоторые люди использовали его, потому что им не разрешено устанавливать .Net framework на своих ПК с Windows из-за количества реестра и системных файлов, которые он делает. (В плотно контролируемых средах.)

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

Я думаю, что это глупо, но это то, что нам сказали несколько пользователей.


Это в основном там, как помощь в разработке моно приложений для моно конкретных библиотек. Также за помощь в продвижении дела, чтобы разработчики могли работать в своей естественной среде при разработке для Mono.


хотя это не представляет широкого интереса, есть несколько случаев, когда mono имеет улучшения по сравнению со стандартной средой выполнения Microsoft. Мигель выступил с докладом о некоторых из них в PDC в этом году:

см. эти сообщения:


также, Даже если у вас есть программа, динамически связанная с Mono, вы можете скомпилировать ее .exe и Mono runtime на pendrive и goto другой компьютер без .NET / Mono установлен, и запустите эту программу на новом ПК без установки во время выполнения. ie, это приводит к портативным приложениям (особенно полезно в качестве портативных приложений USB pen drive) Это невозможно .Сеть. У вас должна быть установлена среда выполнения .NET определенным способом установки, т. е. среда выполнения, содержащая папку copy и paste not вероятный.


Я думаю, главная причина они сделали это, чтобы они могли работать .Net приложений на Mono и .Чистый бок о бок, чтобы сравнить их. Кроме того, есть несколько приложений, которые зависят от библиотеки Mono.


чтобы добавить к многочисленным причинам, упомянутым в других ответах, Mono для Windows может потребоваться установить на Wine, чтобы позволить запускать приложения .Net внутри Wine.