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

Разработка с помощью С# на OSX и Mono

Я собираюсь запустить проект, который требует, чтобы я написал код С#. Дело в том, что у меня есть mac.

Мне было интересно, есть ли какие-либо подводные камни в разработке С#, используя mono на OSX 10.6

Я думаю, что на странице ясно, что реализация четкая, но, с другой стороны, я читал, что люди устанавливают VMWare или что-то вроде этого для использования Windows. Я хотел бы избежать этого, если это возможно.

Примечание

Я буду работать над командой и всеми другие ребята имеют машины Windows

Спасибо

4b9b3361

Ответ 1

На основе вашего комментария к ответу HiVoltRock (разработка ASP.NET), я бы сказал Mono 2.10.1 и MonoDevelop будет просто отлично (стабильный выпуск MonoDevelop работает отлично, но для разработки на OS XI предпочитают использовать самую последнюю версию, которую я компилирую из Git).

Есть несколько вещей, которые следует учитывать, например, пути к файлам (то есть: если разработчики Windows пишут статические пути, такие как ApplicationsInstallDirectory + "\data\templates\foo.bar";, вы столкнетесь с проблемами, поскольку разделители каталогов в Mac OS являются косой чертой. Также, если существующие код использует P/Invoke или другие специфические функциональные возможности Window, в которых вы столкнулись.

Наконец, если ваша база кода использует библиотеки сторонних разработчиков, для которых требуется Windows, это может вызвать проблемы.

Для справки наш продукт был разработан с первого дня с требованием, чтобы он работал на Mono в Linux или OS X. Имея это в виду, мы убедились в том, что все рассмотрим с кросс-платформенным исполнением. Если вы присоединяетесь к существующему продукту, те же соображения могут быть не заданы, а это значит, что многие существующие коды несовместимы с Mono.

Mono Migration Analyzer поможет определить, есть ли у вас какой-либо несовместимый код.

В Mono есть немного фуда о том, как развиваться. Наш проект MVC3 с Razor, работает .NET 4 с использованием NHibernate, StructureMap и т.д., И не было много проблем, возникающих на машине, отличной от Windows.

Ответ 2

Помните, что библиотеки .NET из Microsoft и реализации в Mono совместимы "большую часть времени". Если вы работаете в команде, вы можете столкнуться с некоторой головной болью, связанной с этими проблемами совместимости (также, если вы используете сторонние плагины для любого приложения .NET, которое вы пишете, у вас могут быть и проблемы)., Если вы не хотите запускать виртуальную машину, я просто загружу в Windows. Это может нарушить ваш поток, если вы очень привыкли к пользовательскому интерфейсу OSX, но если остальная часть вашей команды использует Windows, я бы это сделал, чтобы избежать проблем с совместимостью.

Ответ 3

Самое большое, что я разработал на Mono (по общему признанию, в Linux), было графическим интерфейсом. Большая часть кода без GUI будет работать нормально. Единственное, что мне нужно было сделать, это уловить несколько разных исключений. Однако графические интерфейсы были бы совсем другим зверем, поэтому не ожидайте, что они будут хорошо переведены.

Ответ 4

Я бы очень рекомендовал использовать windows-vmware вместо того, чтобы пытаться кодировать некоторые нестабильные программы osx. Это не здорово программировать часами на Mac, а затем понимать, что ни один из ваших кодов не работает на любой машине Windows или что gui выглядит совершенно иначе, чем на вашем компьютере. Всегда выбирайте правильные инструменты и языки для правильной проблемы. Кроме того, визуальная студия довольно приятно работать большую часть времени.

Ответ 5

Я столкнулся с нечетными случаями утечек памяти и segfaults с кодом, скомпилированным в Windows, и упал на Mono Linbox как есть. У меня также были проблемы с компиляцией файлов .csproj с xbuild, у которых была какая-то причуда MS, о которой xbuild не знал.

Если я не ошибаюсь, два компилятора иногда делают несколько разные вещи, которые связаны с тонкими различиями в реализации во время выполнения. Это, скорее всего, причина segfaults и утечек памяти, с которыми я столкнулся.

Моя нижняя строка - это компиляция на той же платформе, что и среда выполнения. Поэтому для локального тестирования вы должны быть в порядке (вы компилируете моно на свой Mac и запускаете/проверяете с помощью моно на вашем Mac). Но не создавайте проект на своем Mac, а затем отправляйте полученные двоичные файлы Mono на серверы Windows с исполняемой средой MS.NET(или наоборот). Если у вас есть сервер сборки, лучше всего придерживаться этого (что все мы должны делать в любом случае...)?

Если у вашей команды нет процесса сборки, и вы должны создать исполняемые файлы, которые вы собираетесь выпустить, я бы использовал Windows VM для этого последнего шага.