Linux « Портирование C# программ

Можно ли портировать программу написанную на C# под Linux? Какой средой разработки лучше пользоваться для того что бы можно было портировать программу на C# под Linux Win и желательно Mac, пойдет ли для этого Visual Studio Express? Есть ли хорошая среда разработки на C# под Linux? Сильно ли будет глючить программа на C# портированная из Win в Linux?

1 ответов


Смотрите Mono и SharpDevelop. Mono работает и на маке.

Портировать можно и без среды разработки, без перекомпиляции вообще, под mono должны работать теже сборки, что и под Windows.
Не будут работать windows specific вещи, нативные winapi вызовы, COM.
Есть проблемы в совместимости библиотек, WinForms нужно проверять (http://mono-project.com/Guide:_Porting_Winforms_Applications), WPF не реализован. Если необходима работа в обоих системах стоит смотреть на Gtk#.

Ну и можно пускать под Wine, правда это нельзя назвать портированием.


Все зависит от программы.

Если она использует то, что реализовано в Mono, то, скорее всего, она заработает даже без особых танцев с бубном. (Например, программу, которая использовала Windows Forms и стандартные C# библиотеки, мне совершенно спокойно удалось запустить под Linux: открыл проект, созданный девятой студией, скомпилировал, запустил. Вид, конечно, довольно убогий, но функционал есть).

Если программа использует то, что не реализовано в Mono, то полноценно заработать она вряд ли сможет. Возможно, каким-нибудь образом удастся выжать что-то из совместимости байт-кода. Особо в это дело не вникал, так что если я не прав, прошу прощения.

Для того, чтобы все хорошо работало на всех платформах, я бы порекомендовал использовать кроссплатформенную реализацию C# - Mono. Для интерфейса - GtkSharp. В качестве IDE - MonoDevelop - это, пожалуй, единственная C# IDE под Linux, если не считать, конечно, связок, типа VIM+компилятор.

Можно попробовать прикрутить Mono к Visual Studio (к Express, скорее всего, это не удастся сделать) и разрабатывать все под Windows, а затем уже готовое просто компилировать на Linux'е.


Если Вы решили портировать приложение под linux, то для начала оцените трудоемкость предстоящего процесса. Самый простой способ - MoMA(Mono migration Analyzer). Утилита укажет Вам, какие нереализованные функции .net используются в Вашем приложении и в каких местах.

В зависимости от везучести код может как пеерносим полностью, так и несовместим вовсе. В Mono нет WPF, ClickOnce, не реализованы некоторые функции и т.д.

Например в нашем случае бизнес-логика в том числе и asp.net web сервис были практически полностью переносимы, но GUI, сильно завязанный на компоненты Infragisitcs, был не переносим из-за нереализованных функций а так же большого количества WinAPI вызовов в коде. Отказались от портирования.


уже готовое без перепилки мало вероятно, зависит от того что использовалось при разработке, даже если это Qt или GTK+ то придётся делать костыли, если winAPI и соответствует стандартам, то под вайном имхо должно запуститься без особых проблем. IDE для разработки кучи (навскидку KDevelop, Qt Creator, NetBeans или Eclipce)