2008-10-08 2 views
36

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

ответ

31

Я использовал его для ряда внутренних и коммерческих проектов с большим успехом. Мои предупреждения:

  • Напишите много модульных тестов и убедитесь, что они ВСЕ проходят под Mono - это сэкономит вам массу неприятностей.
  • Если вам не нужно, НЕ используйте API их внедрения. Это просто прост в использовании, но нелегко мусор собирать правильную память или утечку всей вашей памяти.
  • Никогда, никогда даже не приближайтесь к SVN и, если нет выбора, не компилируйте свои собственные. В SVN так часто происходят изменения в SVN, что, скорее всего, вы закончите реализацию чего-то, что не работает над версией релиза, если ваш проект значительно большой.
  • Не пытайтесь самостоятельно решать проблемы самостоятельно, используйте IRC-канал. Люди там полезны, и вы спасете дни по дням - не делайте ту же ошибку, что и я.

Удачи вам!

Редактировать: Причина, по которой я говорю, что не компилировать свой источник из источника (релиз или SVN), заключается в том, что его легко настроить иначе, чем разблокировать двоичные файлы и скрыть ошибки, например, в сборке мусора.

Редактировать 2: Забыл ответить на вторую часть вашего вопроса. В моем случае у меня не было проблем с портированием кода, но я не использовал какие-либо специфичные для MS библиотеки (WinForms, ASP.NET и т. Д.). Если вы используете только System. *, Все будет в порядке; кроме того, вы можете столкнуться с проблемами. Mono 2.0 довольно прочен.

1

Я не использовал Mono самостоятельно, но вам может быть интересно узнать, что FogBugz использует Mono для предоставления Lucene.NET на платформах Linux. (Я знаю это только потому, что Джоэл упомянул об этом в Stack Overflow Podcast # 24.)

+0

У вас есть какие-либо ссылки на дополнительную информацию об этом? Я ищу порт Lucene.Net для Mono. – devios1 2011-01-11 16:37:54

3

Если вы работаете ASP.NET 2.0, он работает очень хорошо. Winforms могут работать, но это может вызвать проблемы с отображением. Если вы хотите совместимость в приложении форм, я бы предложил GTK #, поскольку он является кроссплатформенным.

Как и предполагалось, до тех пор, пока вы проверите тест, я бы согласился использовать его коммерчески, если это жизнеспособный вариант для вас, если только это не требуется. На мой взгляд, сейчас я бы держался подальше от него. И забудьте WPF, так как в это время поддержки нет, и, возможно, никогда не будет (хотя они работают на лунном свете, иначе Silverlight для linux)

5

Я считаю, что Mono будет в основном двоичным, совместимым с MS. Поэтому я просто компилирую с MS и бегу в любом месте, например Java.

Производительность Mono в Linux очень близка к MS, в некоторых случаях в 2 раза медленнее, чем в 5-10 раз медленнее при использовании Mono в Windows (но вы действительно должны придерживаться MS тогда).

0

У меня есть набор приложений для оболочки на производстве.

Я согласен с @ cody-broious, пишу много модульных тестов. В прошлом я обнаружил, что регулярные выражения не работают точно так же, как и CLR Windows.

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

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

0

Я использовал его для шифрования/дешифрования, и он работал нормально.

В будущем я бы подумал об использовании Mono/C#, но я бы не ожидал, что это будет 100% точно как .Net на Windows.

+0

Подробный обзор того, что, по вашему мнению, отсутствует, будет полезен. – 2012-12-05 21:18:25

0

Конечно, вы можете, особенно после выхода Mono 2.0. Mono 2.0, готов для реальных проектов.

You can check this

5

Я имел некоторый опыт работы с Mono.

Чистые материалы .NET (например, бизнес-логика, контроллеры или алгоритмы) могут быть перенесены без каких-либо проблем. Тем не менее, странные вещи начинают проявляться в компонентах, которые взаимодействуют с операционной системой, пользовательским интерфейсом, сервисами или постоянством. Поэтому будьте готовы к некоторой отладке и взлому.

вещи, которые могут помочь:

  • Component-Driven Development - так что код повторно используется Windows .NET и Mono, в то время как различия изолированы и испытаны)
  • Continuous Integration работает и проверяя все на Mono и MS.NET , так что возможные проблемы могут быть обнаружены как можно быстрее (рекомендуется также автоматическое развертывание и проверка работоспособности).
  • В Mono не существует множества наборов компонентов пользовательского интерфейса для разработки оболочки.
  • Когда поставщик компонентов говорит, что его код «совместим с Mono», он не такой, как «работает на моно и поддерживается».

Хотя в настоящее время есть некоторые companies going into production with Mono, я бы еще подождать, прежде чем бросаясь туда из-за:

  • Отсутствие приличных и коммерчески поддерживаемых компонентов сьютов UI
  • Проблемы, связанные с эффективным мусором коллекция
  • Не лучший опыт отладки (сравните с историческим отладчиком в VS 2010)

PS: если есть компания, предлагающая полностью управляемое облачное вычислительное решение (а не только виртуальная машина, но более похожая на эквивалент Hadoop для .NET), то я буду вынужден прыгать, несмотря на эти проблемы.

Смежные вопросы