Это может быть глупый вопрос ... но я только что изучал проект Mono, и у них есть раздел об установке Моно в Windows. Но поскольку в Windows, очевидно, уже есть среда выполнения .NET, может ли кто-нибудь сказать мне, в чем именно смысл использования Mono для Windows? Это помогает с кроссплатформенной разработкой или чем-то в этом роде?
В чем смысл Mono в Windows
Ответы (12)
Поскольку Mono не реализует .Net на 100% так же, как MS .Net Framework, хорошо, что вы можете протестировать на Mono без необходимости запуска в Linux. Также Mono имеет привязки для создания форм с помощью GTK, которые MS не поддерживает.
У Mono есть несколько функций, которых нет в .NET.
Mono очень модульный. Вы можете разбить его на крошечные кусочки и развернуть только те части, которые вам нужны. Не хотите System.Xml? Хорошо, его больше нет.
Mono можно встраивать. Вы можете разместить его в своем приложении C / C ++, чтобы пользователи могли создавать его сценарии из безопасной управляемой изолированной среды. Самый известный пример этого - mod_mono, который размещает Mono внутри веб-сервера Apache, и как, например, ASP.NET реализован в Mono. Эта функция отлично сочетается с упомянутой выше модуляризацией.
Об этом уже упоминалось: статическое связывание. Также отлично сочетается с модуляризацией.
Компилятор как услуга - еще один. Андерс Хейлсберг говорил об этом в течение долгого времени, и возможно, просто может быть, он будет готов для C # 5.0. Что ж, у Mono он уже есть, и на самом деле он имел это в течение многих лет.
Мигель де Икаса, ведущий разработчик Mono, также имеет инициативу, которую он называет «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 требует специальной поддержки со стороны виртуальной машины, которая не является частью CLI или .NET. Это используется для игровой логики и, например, в Second Life.
Mono делает кое-что, чего не делает .Net.
Например, mono поддерживает статическое связывание, поэтому вы можете создавать, компилировать и распространять свое приложение, не требуя отдельного установщика времени выполнения. Если вы создали приложение, полагающееся на кроссплатформенность моно, есть некоторые отличия от .Net, и поэтому использование моно в Windows является большей гарантией совместимости.
.Net делает кое-что, чего не делает моно.
В BCL есть несколько мест, которые еще не портированы для моно, например, WPF и Winforms.
Если вам нужно приложение, которое также будет работать на Mac / Linux, вы, вероятно, захотите сначала разработать для моно, даже если вы делаете большую часть работы в Windows.
Примечание. все это предшествует .Net Core / Standard.
Из технических часто задаваемых вопросов Mono:
Зачем нужна поддержка Windows, если можно запустить настоящую вещь?
Причины разные:
Поддержка Windows помогает нам отличать переносимые части Mono от непереносимых его версий, помогая Mono стать более переносимым в будущем.
Это помогает нам, поскольку мы можем изолировать проблемы в Mono, разделив проблему (это проблема времени выполнения или проблема ОС?).
Около половины участников Mono - разработчики Windows. У них есть много разных причин для участия в этих усилиях, и мы считаем очень важным позволить этим разработчикам запускать среду выполнения в Windows, не заставляя их использовать новую операционную систему.
Mono не сильно изменяет реестр Windows, обновляет системные библиотеки DLL и не устанавливает библиотеки DLL по пути Windows / System32.
Это помогает разработчикам на базе Windows протестировать свой код в Mono перед развертыванием в Linux.
Mono и приложения, которые встраивают Mono, могут быть развернуты без установщика (вы можете «xcopy» развернуть свое приложение и необходимые файлы Mono без установки среды выполнения .NET).
Если вы хотите разработать кроссплатформенное приложение на C #, то использование реализации Microsoft - не самое разумное решение, поскольку для других платформ нет полностью совместимой альтернативы.
Таким образом, использование Mono в Windows для разработки приложений гарантирует, что у вас не возникнет проблем с переносом его на другую ОС (при условии, что вы избегаете других ям, таких как P / Invoke).
Некоторые люди использовали его, потому что им не разрешено устанавливать платформу .Net на их ПК с Windows из-за большого количества реестров и системных файлов, которые он делает. (В строго контролируемой среде.)
Mono, с другой стороны, самодостаточен в Program Files и записывает ключ реестра только с указанием пути (что не обязательно для запуска).
Я думаю, что это немного глупо, но об этом нам говорили несколько пользователей.
В основном он используется в качестве помощи при разработке приложений Mono для конкретных библиотек Mono. Также за помощь в продвижении дела, чтобы разработчики могли работать в своей естественной среде при разработке для Mono.
Хотя это не вызывает всеобщего интереса, есть несколько случаев, когда в моно есть улучшения по сравнению со стандартной средой выполнения Microsoft. Мигель рассказал о некоторых из них на PDC в этом году:
Смотрите эти сообщения:
также, даже если у вас есть программа, динамически связанная с Mono, вы можете скомпилировать эту скомпилированную среду выполнения .exe и Mono на флеш-накопителе и перейти на другой компьютер без установленного .NET / Mono и запустить эту программу на новом ПК без какой-либо установки среды выполнения. т.е. это приводит к переносным приложениям (особенно полезным в качестве переносных приложений для USB-накопителей). Это невозможно с .NET. У вас должна быть установлена среда выполнения .NET определенным способом установщика, т. Е. Среда выполнения, содержащая копирование и вставку папки, невозможна.
Я думаю, что основная причина, по которой они это сделали, заключается в том, что они могут запускать приложения .NET на Mono и .NET параллельно для их сравнения. Кроме того, есть несколько приложений, которые зависят от библиотек Mono.
В дополнение к многочисленным причинам, упомянутым в других ответах, может потребоваться установка Mono для Windows в Wine, чтобы разрешить запуск приложений .Net внутри Wine.