Подтвердить что ты не робот

Должен ли я использовать Mono в реальном проекте?

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

4b9b3361

Ответ 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.