Какой смысл Mono в Windows?

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

Ответ 1

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

Ответ 2

Есть несколько возможностей Mono, которые .NET не делает.

Моно очень модульно. Вы можете разбить его на мелкие кусочки и развернуть только те части, которые вам нужны. Не хотите System.Xml? Хорошо, все прошло.

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

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

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

Miguel de Icaza, Mono Lead Developer также имеет инициативу, которую он называет "Embrace and Extend.NET", которая расширяет CLI способами, которые не могут (в настоящее время) возможны с другими реализациями CLI (включая .NET). Пока что Embrace и Extend.NET имеют три функции.

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

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

И совсем недавно, продолжения. Это первый раз, когда Mono выходит за пределы области спецификации: индексы длинного массива отлично действуют в соответствии с спецификацией, а Mono.Simd также работает над каждой реализацией, совместимой с CLI (хотя и очень медленной), но Mono.Tasklet нуждается в специальных поддержка от VM, которая не является частью CLI или .NET. Это используется для логики игры и, например, в Second Life.

Ответ 3

Mono делает то, что не делает .Net.

Например, mono поддерживает статическое связывание, поэтому вы можете создавать, компилировать и распространять свое приложение, не требуя отдельного установщика во время выполнения. Если вы создали приложение, которое полагается на моно для кроссплатформенности, есть некоторые отличия от .Net, и поэтому придерживаться моно в Windows - это лучшая гарантия совместимости.

.Net делает некоторые вещи, которые моно не делает.

В BCL есть несколько мест, которые еще не перенесены для моно, например, WPF и Winforms.

Если вам нужно приложение, которое будет также работать на Mac/Linux, вы, вероятно, сначала захотите разработать его для моно, даже если вы выполняете большую часть работы с Windows.


Примечание: все это предшествует .Net Core/Standard.

Ответ 4

Из Mono технические вопросы:

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

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

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

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

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

Mono не сильно модифицирует реестр Windows, обновляет системные DLL, установить DLL на Windows/System32 дорожка.

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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