Насколько действительно кроссплатформенный .Net framework? - PullRequest
9 голосов
/ 05 мая 2010

Что обычно нужно сделать для запуска приложения WinForms на компьютере Mac или Linux?

а. Просто скопируйте и запустите (при условии, что у них установлен Framework).
б. Перестроить.
с. Косметические модификации исходного кода.
д. Тяжелые модификации исходного кода и редизайн форм.

Предполагается, что приложение разработано как 100% управляемый код C # 3 с помощью Visual C # Express или Visual Studio 2008 для .Net Framework 3.5, разработанный без использования каких-либо сторонних компонентов / библиотек, без инкапсуляции неуправляемого кода или какого-либо низкого -уровневые хаки - используется только стандартный документированный Microsoft .Net Framework C # API). Или те же условия, но язык C # 4, .Net Framework 4 и Visual Studio 2010.

Есть ли где-нибудь практическое руководство по разработке приложений, готовых к моно, с использованием MS .Net Framework и Visual Studio? Любые рекомендации, советы, конкретные аспекты подчеркиваются, информируя разработчика о том, что он действительно должен иметь в виду, чтобы написать легко переносимое приложение без необходимости поиска каждой функции в справочнике Mono при кодировании в Visual Studio.

Ответы [ 4 ]

12 голосов
/ 05 мая 2010

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

Инструмент, который может вам очень помочь: MoMA . MoMA создается теми же людьми, которые делают Mono, и сообщит вам, используете ли вы какие-либо функции, которые еще не были перенесены.

В целом, .NET 3.5 и Winforms в основном в порядке. Совместимость с версией 4 все еще находится в стадии разработки.

Более современным инструментом, если вы занимаетесь разработкой под Windows, является .NET Portability Analyzer от Microsoft. Это можно использовать через Visual Studio.

5 голосов
/ 05 мая 2010

Если это приложение Windows Forms, использующее стандартные элементы управления Windows Forms и не имеющее сторонних компонентов, вы обычно можете запустить его непосредственно в Mono, просто скопировав и запустив.

Mono очень хорошо поддерживает функции Windows Forms и C # 3.

Однако, если вы используете какие-либо собственные компоненты, доступ к данным за пределами того, что поддерживается Mono или WPF, вы столкнетесь с проблемами. C # 4 / .NET 4, скорее всего, также не будет работать на этом этапе.

1 голос
/ 05 мая 2010

Ну, я не разрабатывал большие проекты, но из моего опыта вам пришлось бы внести некоторые незначительные изменения в ваш код, но только для того, чтобы уточнить некоторые вещи. Само приложение должно работать без перекомпиляции. Что касается оконных форм, я обнаружил, что при работе с GDi он иногда работает очень медленно, но, возможно, я просто что-то делал не так. Однако команда Mono утверждает, что она полностью поддерживает формы Windows.

Еще одна вещь, которую стоит упомянуть. Очень сложно написать кроссплатформенное приложение, которое не будет жестким без использования некоторых собственных функций ОС. Я думаю, что вы всегда должны рассмотреть возможность написания некоторых дополнительных модулей для конкретной ОС, чтобы обеспечить тесную интеграцию с базовой ОС и использовать некоторые интересные вещи (например, потрясающие функции панели инструментов в OSX). Вы также должны помнить, что люди привыкли по-разному выглядеть и чувствовать себя в разных ОС

0 голосов
/ 05 мая 2010

Теоретически, .Net полностью кроссплатформенный, так как он не зависит от конкретной архитектуры, но зависит от виртуальной машины.

На практике у вас есть реализация Microsoft для Windows и моно реализация для Linux / Mac. Основная проблема заключается в том, что реализации могут отличаться друг от друга, что затрудняет запуск приложения на нескольких машинах из коробки.

Исходный код не нужно изменять, если не некоторые библиотеки не перенесены в моно, или используются разные библиотеки.

C # 4 может быть немного сложнее, потому что моно еще не дошло до реализации Microsoft.

...