C # моно из Windows в Mac - PullRequest
       15

C # моно из Windows в Mac

4 голосов
/ 08 апреля 2009

Я хотел знать, что я не должен делать в коде, который не позволит моему приложению C # работать на Mac.

Ответы [ 5 ]

4 голосов
/ 08 апреля 2009
4 голосов
/ 08 апреля 2009

В общем случае вы не должны использовать что-либо из пространств имен Microsoft.*, ни PInvoke (DllImport в C #), ни пользовательский интерфейс также могут быть проблематичными.

Дополнительная информация о совместимости с Mono содержится в Руководстве по Mono Портирование приложений Winforms . Существующие приложения можно проверить на совместимость с помощью инструмента Migration Analyzer .

ОБНОВЛЕНИЕ: PInvoke фактически работает в Mono, но если вы хотите, чтобы он работал кроссплатформенно, вы должны предоставить собственную разделяемую библиотеку с одинаковым интерфейсом для каждой платформы (т.е. Win API, скорее всего, будет , а не работа).

1 голос
/ 15 апреля 2009

В дополнение к рекомендациям divo, я бы порекомендовал инструмент Mono Migration Analyzer (MoMA) : «Инструмент Mono Migration Analyzer (MoMA) помогает вам определить проблемы, которые могут возникнуть при переносе приложения .Net Mono "

Кроме того, я бы следил за блогом Мигеля де Иказы и веб-сайтом Mono Project .

В своей презентации для группы пользователей Boston.NET в этом месяце он показал предварительный просмотр плагина Visual Studio, который запускает ваше приложение на Mono с использованием виртуальной машины! Это позволяет тестировать совместимость в процессе разработки.

Я полагаю, что их цель состояла в том, чтобы выпустить его на TechEd 2009, так что ищите обновление в течение следующего месяца или около того.

0 голосов
/ 08 апреля 2009

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

Mono несколько эмулирует его с помощью WINE, но я бы не стал этому доверять. Моно сделал это некоторое время назад, но усилия были прекращены. См. WinForms на Mono для получения дополнительной информации. Спасибо jpobst .

Попробуйте использовать GTK # или Qt # (хотя я не слишком уверен, что последний действительно существует) для кроссплатформенной поддержки. Вы можете также рассмотреть возможность использования Java с SWT или даже Swing вместо C #, но это, вероятно, не будет вариантом, который вы готовы рассмотреть.

Использование чего-либо, связанного с P / Invoke, вероятно, также является плохой идеей, поскольку это вызывает собственный код, который, вероятно, не будет переносимым (если вы не напишите его самостоятельно, тогда вы можете сделать его переносимым).

0 голосов
/ 08 апреля 2009

Я не уверен, возможно ли это с моно, но вызовы WIN32 API определенно не будут работать;)

...