Развивается ли в Mono кроссплатформенность? - PullRequest
16 голосов
/ 07 августа 2010

В какой мере развивается моно кроссплатформенность? Как мне скомпилировать для Windows (в Linux), как я запускаю вещи в Linux (потому что нет .NET JIT компилятора)?

Так в чем же особенности разработки с Mono? Каковы преимущества по сравнению с разработкой в ​​Visual Studio (кроме кроссплатформенных вещей)?

Ответы [ 4 ]

28 голосов
/ 07 августа 2010

Разработка в Mono, безусловно, является кроссплатформенной с caveat emptor :

  • Старайтесь держаться подальше от специфичных для Windows API
  • Нет взаимодействия с нативнымWindows API ... или ... вы можете #ifdef использовать Windows API и предоставить свою собственную оболочку Mono, чтобы минимизировать изменения кода, например, есть оболочка DLL, которая использует Interop для вызова метода Win32, такого как GetFont', это гипотетический пример, GetFont вернет информацию о шрифте в Mono, которая не существует, но, тем не менее, вы можете создать поддельную оболочку, которая ничего не возвращает, и включить макрос #ifdef для использования оболочки при компиляции в Mono, иОтключите макрос при компиляции под Windows, как вы реализуете оболочку, зависит от вас.
  • Не используйте расширенные свойства графического интерфейса, которые могут отсутствовать в Mono.
  • Используйте свойство Environment, напримеркак NewLine, чтобы сделать его независимым от CR Unix и CRLF Win32, то же самое относится к разделителю пути, для Unix '/' и для Win32 '\'.
  • Сериализация немного отличается в Mono, вы сериализуете объект в Mono, не обманывайте себя, думая, что он будет десериализован в Win32, и наоборот.

Наконец, что не менее важно, продолжайте проверять Mono на Win32 и обратно, продолжайте тестировать и тестировать его.

3 голосов
/ 07 августа 2010

Большая часть времени исполнения моно совместима с CLR, поскольку они соответствуют одному и тому же стандарту.

Это означает, что как только вы скомпилируете свой код (в Mono или visual studio), при условии, что вы будете использовать только функции, поддерживаемые обоими (например, без WMI в моно), и напишите приложение, ориентированное на платформу, с использованием передового опыта (примеры использования Path.Combine для построения путей к файлам и каталогам, использование Environment.NewLine для вывода новых строк и т. д.), ваше приложение может работать без изменений на любой платформе с Mono или CLR (включая Windows, Linux и Mac).

Вы можете разработать с моно в визуальной студии, поэтому часть вашего вопроса о том, что это спорный вопрос.

2 голосов
/ 07 августа 2010

Mono сам по себе является кроссплатформенным.

Разрабатывая специально для mono, вы сможете запускать свой исполняемый файл на любой платформе, для которой есть mono.Само по себе это самое большое преимущество mono по сравнению с MSFT-платформой .Net.Сказано иначе: Если вы собираете сборку с помощью mono, вы гарантируете межплатформенную поддержку, в то время как сборка с .Net может не дать вам этого.

Mono сделал некоторые обновления донедостатки в .Net (например, Mono.security предлагал функции, которых нет в .Net 2.0, хотя я считаю, что MSFT подобрал их для более поздних выпусков).

Можно собрать сборку .Net с использованием Visual Studio и запустить ее в Mono, однако ваша сборка должна позаботиться об использовании только каркасов / библиотек, которые Mono поддерживает , ичто любые неуправляемые сборки, на которые ссылается ваша сборка, доступны для выбранной вами ОС.Другими словами: если ваша сборка использует dll C ++ для Windows, вы должны убедиться, что у вас есть правильный файл .a / .so для linux.

Чтобы запустить сборку .net в Linux (при условии, что mono установлен правильно), введите: mono myprogram.exe

1 голос
/ 07 августа 2010

Единственное преимущество, развиваемое в Mono, заключается в том, что вы можете использовать среду Mac OS X или Linux.Но если у вас есть выбор, никогда не покидайте Visual Studio. Насколько мне известно, Visual Studio - лучшая среда разработки, доступная для разработки на C # и VB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...