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