Кто-нибудь использовал Mono, реализацию .NET с открытым исходным кодом на крупном или среднем проекте? Мне интересно, готов ли он к реальному миру, производственной среде. Является ли он стабильным, быстрым, совместимым,... достаточным для использования? Требуется ли много усилий для переноса проектов в среду выполнения Mono или действительно ли это действительно достаточно для того, чтобы просто взять и запустить уже написанный код для среды выполнения Microsoft?
Должен ли я использовать Mono в реальном проекте?
Ответ 1
Я использовал его для ряда внутренних и коммерческих проектов с большим успехом. Мои предупреждения:
- Напишите много модульных тестов и убедитесь, что они ВСЕ проходят под Mono - это сэкономит вам массу неприятностей.
- Если вам абсолютно не нужно, НЕ используйте их API внедрения. Он прост в использовании, но он нечеловечески легко мусор собирает действительную память или течет всю вашу память.
- Никогда, никогда даже не приближайтесь к SVN, и если нет выбора, не компилируйте свой собственный. В SVN так часто происходят изменения в SVN, что, скорее всего, вы закончите реализацию чего-то, что не работает над версией выпуска, если ваш проект значительно большой.
- Не пытайтесь самостоятельно решать проблемы самостоятельно, используйте IRC-канал. Люди там полезны, и вы спасете себя днями - не делайте ту же ошибку, что и я.
Удачи!
Изменить: причина, по которой я говорю, что не компилировать свой собственный источник (релиз или SVN), заключается в том, что легко настроить его по-другому, чем разблокировать двоичные файлы и скрыть ошибки, например, в сборке мусора.
Изменить 2: Забыл ответить на вторую часть вашего вопроса. В моем случае у меня не было проблем с портированием кода, но я не использовал какие-либо специфичные для MS библиотеки (WinForms, ASP.NET и т.д.). Если вы используете только System. *, Все будет в порядке; кроме того, вы можете столкнуться с проблемами. Mono 2.0 достаточно прочен.
Ответ 2
Я считаю, что Mono будет в основном бинарным, совместимым с MS. Поэтому я просто компилирую с MS и запускаю в любом месте, например Java.
Производительность Mono в Linux очень близка к MS, в некоторых случаях всего лишь в 2 раза медленнее, чем в 5-10 раз медленнее при использовании Mono в Windows (но вы действительно должны придерживаться MS тогда).
Ответ 3
У меня был некоторый опыт работы с Моно.
Чистые материалы .NET(например, бизнес-логика, контроллеры или алгоритмы) могут быть перенесены без каких-либо проблем. Тем не менее, странные вещи начинают проявляться в компонентах, которые взаимодействуют с операционной системой, пользовательским интерфейсом, услугами или упорство. Поэтому будьте готовы к некоторой отладке и взлому.
Что может помочь:
- Разработка с использованием компонентов - так что код используется повторно для Windows.NET и Mono, в то время как различия изолированы и протестированы).
- Непрерывная интеграция работает и проверяет все против Mono и MS.NET, так что возможные проблемы можно обнаружить как можно быстрее (автоматическое развертывание и рекомендуются также проверки работоспособности).
- В Mono нет много наборов компонентов пользовательского интерфейса для разработки оболочки.
- Когда поставщик компонента говорит, что его код "совместим с Mono", он не такой, как "работает на Mono и поддерживается".
Ответ 4
Если вы работаете ASP.NET 2.0, он работает очень хорошо. Winforms могут работать, но это может вызвать проблемы с отображением. Если вы хотите совместимость в приложении форм, я бы предложил GTK #, поскольку он является кроссплатформенным.
Как и предполагалось, до тех пор, пока вы проверите тест, я бы согласился использовать его на коммерческой основе, если это жизнеспособный вариант для вас, если только он не является winforms, который вам нужен. На мой взгляд, сейчас я бы держался подальше от него. И забудьте WPF, поскольку в данный момент поддержки нет, и никогда не будет (хотя они работают над лунным светом, иначе Silverlight для Linux)
Ответ 5
Я сам не использовал Mono, но вам может быть интересно узнать, что FogBugz использует Mono для предоставления Lucene.NET на платформах Linux. (Я знаю это только потому, что Джоэл упомянул об этом в переполнении подкачки Stack # 24.)
Ответ 6
У меня есть куча приложений оболочки в производстве.
Я согласен с @cody-broious, пишу много модульных тестов. В прошлом я обнаружил, что регулярные выражения не работают точно так же, как и CLR Windows.
На самом деле это проще, чем вы думаете, чтобы просто войти в систему, просто скомпилировать и запустить. Если вы используете NAnt для своих проектов, его еще проще перевести.
Обычно я устанавливаю моно из исходных выпусков, и у меня не было никаких проблем.
Ответ 7
Я использовал его для инструментов шифрования/дешифрования, и он работал нормально.
В будущем я бы предпочел использовать Mono/С#, но я бы не ожидал, что он будет на 100% точно так же, как .Net в Windows.
Ответ 8
Конечно, вы можете, особенно после выхода Mono 2.0. Mono 2.0, готов для реальных проектов.