Портирование кода C # для запуска на OSX - PullRequest
3 голосов
/ 27 сентября 2011

У нас есть консольное приложение, которое работает в .NET 3.5.Он подключается к USB-устройству и выплевывает данные, полученные с него.

Я бы хотел перенести это на OSX и задать несколько вопросов о стратегии для этого.Драйвер USB уже установлен в OSX.

Mono выглядит многообещающе, но я не понимаю.Конечный пользователь должен установить Mono или запустить что-то?

После просмотра некоторых других публикаций кажется, что вы можете написать сценарий bash и сделать небольшой взлом, чтобы установить программу ... но я не могу найти действительно хорошее объяснение этого.также кажется, что моно не будет установлен в этом процессе.Эти посты были также написаны в '09, поэтому мне интересно, изменилось ли что-нибудь, чтобы сделать это проще.

Мой вопрос: каков хороший подход к запуску / переносу консольного приложения C # на OSX.

Ответы [ 2 ]

4 голосов
/ 27 сентября 2011

.NET компилируется в IDL (байт-код) на всех платформах, включая платформу Windows.Затем он запускается на CLR (общеязыковой среде выполнения iirc), которая похожа на концепцию виртуальной машины Java.Просто так получилось, что на большинстве машин Windows этот CLR установлен по умолчанию.Поэтому, если вы хотите, чтобы ваше приложение работало на другой платформе, вам сначала нужен CLR для этой платформы.Mono включает CLR, который может работать на OSX.Таким образом, либо вам (как часть вашего пакета / комплекта), либо пользователю потребуется установить его до запуска .NET.

Другая проблема, с которой вы столкнулись, заключается в том, что .NET также содержит определенные API, которые не являются частью стандарта ECMA, который ваше приложение может или не может использовать.Некоторые из этих API присутствуют в моно, а некоторые нет.Те, которые обычно не имеют эквивалентного или аналогичного API, который вы можете использовать для достижения того же результата, однако вам может потребоваться изменить приложение, чтобы справиться с этим сценарием.

Это действительно зависит от того, какие приложения .NET api используются вашим приложением, и от того, насколько сложно будет их портировать.Я предполагаю, что вы, вероятно, используете winforms как часть вашего приложения, поэтому вот руководство с моно сайта для этой части API

http://www.mono -project.com / Guide: _Porting_Winforms_Applications

0 голосов
/ 27 сентября 2011

Вы можете связать установщик Mono с вашим приложением (или вашей собственной сборкой Mono). У вас может даже быть возможность статически связать моно среду выполнения с вашим приложением на Mac, я не могу вспомнить, поддерживается ли она (пока) или нет. Я уверен, что вы можете.

Кроме того, в отношении предупреждений gordatron, если вы используете Path.Combine () для создания путей вместо жесткого кодирования \ в качестве разделителя пути (что вы должны делать в любом случае), вам не придется беспокоиться о наличии файловой системы. проблемы пути.

Для удобного простого способа проверить, использует ли ваше приложение какие-либо функции, которые недоступны в Mono, вы можете использовать http://www.mono -project.com / MoMA , чтобы проверить наличие неподдерживаемых методов / классов и любые другие потенциально не кроссплатформенные блокираторы, такие как P / Invokes.

Что касается консольного приложения, я не вижу, чтобы у вас возникало много проблем (хотя вам, вероятно, придется взаимодействовать с USB-оборудованием иначе, чем в Windows).

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