Если бы вам пришлось написать приложение с графическим интерфейсом, которое запускается локально и вызывает веб-сервис, чтобы быть кроссплатформенным, вы могли бы сделать это с помощью .Net, какие инструменты вы бы порекомендовали?
Я рассматривал Java, поскольку ее было бы относительно легко подобрать из-за ее сходства с C#, а затем я мог бы использовать JVM.





Вам следует ознакомиться с Моно проект и MonoDevelop; явной целью этих проектов является создание и выполнение кода .NET на различных платформах, включая Windows, Linux и Mac OSX.
Поскольку Mono является повторной реализацией .NET, он всегда немного отстает от Microsoft.NET, но они хорошо охватывают .NET 2.0 и некоторые функции .NET 3.x. Обратите внимание, что Mono выполняет двоичные файлы .NET, поэтому, пока функции вашей программы поддерживаются Mono, вы можете взять исполняемый вами EXE-файл приложения в Windows и запустить его в Linux / Mono без перекомпиляции.
Mono поддерживает Winforms и ASP.NET 2.0 и частичную поддержку функций 3.x, поэтому вам не нужно создавать собственные.
Единственное известное мне предостережение относительно запуска .Net-кода в Mono, который был скомпилирован в Windows, - это использование PInvoke (обращение к Win32 API), который, что неудивительно, не полностью поддерживается Mono в Linux или Mac. Это не будет проблемой для вашего приложения с графическим интерфейсом, которое вызывает веб-сервис: o)
Запуск Mono WinForms - плохой пользователь XP, потому что он не использует собственные виджеты, а «рисует» элементы управления, подобные Windows. Для реального кроссплатформенного графического интерфейса с Mono вы можете разработать графический интерфейс для каждой платформы (WinForms для Windows, Cocoa # для Mac, Gtk # / Qt # для Linux). Поскольку логика заложена в WS, это должно
Вы также можете использовать remobjects C#. remobjects.com/elements/hydrogene
Проверьте Моно проект
Также обратите внимание на Silverlight или Вспышка для богатых интернет-приложений.
Мононуклеоз - единственный вариант на данный момент. Он работает на эти платформы. И будут проблемы, не обязательно огромные, но все же.
Mono - не единственный текущий вариант - REALsoftware имеет продукт под названием REALbasic, который может компилировать тот же проект в собственные исполняемые файлы для Windows, Mac и Linux: realsoftware.com/products/realbasic
Моно на самом деле - единственный серьезный вариант. REALBasic не имеет ничего общего с .NET framework, и этот вопрос касался кроссплатформенной разработки .NET.
Лучше написать это с помощью какого-нибудь кроссплатформенного инструментария. Скорее всего, вы не сможете использовать хороший визуальный дизайнер (на самом деле это зависит от того, какой набор инструментов вы выберете), но написать пользовательский интерфейс вручную не так уж и сложно. Ребята, занимающиеся HTML, делают это постоянно, и это довольно обычная практика в мире, не относящемся к MS.
Некоторые кросс-платформенные инструменты пользовательского интерфейса с привязками .NET
Почему бы не использовать встроенные Winforms от mono? Отказ от использования Winforms усложнит развертывание.
потому что поддержка WinForms поддерживается только разработчиками Mono, и, как вы можете видеть на их веб-сайте, это по-прежнему их второй приоритет. Первый - GTK #. GTK +, wxWindows и QT имеют гораздо более крупные и специализированные команды, чем WinForms на Mono, поэтому я бы не стал делать ставку на очень долгую поддержку WinForms в Mono.
Фактически, Qt находится под лицензией LGPL уже почти ровно два года, нет необходимости получать лицензию, даже если ваше программное обеспечение является проприетарным. Кроме того, Nokia теперь использует Qt.
Как было сказано ранее, Моно проект - ваш лучший выбор, учитывая его поддержку сообщества.
Если вы используете Visual Basic, стоит взглянуть на REALbasic, так как в нем есть кросс-компилятор, который создает собственные исполняемые файлы. У них есть пробная версия можно скачать тоже
Недавно я написал небольшое приложение с графическим интерфейсом на C# для Linux, которое компилируется и запускается с использованием моно. Я обнаружил, что мне пришлось использовать компилятор "gmcs", чтобы иметь доступ к современным функциям C# и .Net (mono 1.9 поставляется с несколькими разными компиляторами).
И при компиляции файла .exe я обнаружил, что мне нужно добавить переключатель «-target: winexe», чтобы приложение запускалось в Windows без появления командной строки позади приложения.
Мне еще предстоит выяснить, как скомпилировать приложение .Net, которое в Windows будет запускаться с сетевых дисков, не требуя специальной конфигурации безопасности .Net на ПК. (Я думаю, что это общая проблема с приложениями .Net, но я все еще учусь.)
Маленький совет. Кросс-платформенное программирование похоже на кросс-браузерное программирование, и одно, что нужно сделать, это протестировать, протестировать и протестировать на всех платформах, которые вы хотите поддерживать.
Честно говоря, я бы оценил вашу клиентскую базу и ваши существующие навыки. Если у вас есть разделение 50/50 или даже 70/30 Windows на не-Windows, вам, вероятно, будет лучше с Java или каким-либо другим кроссплатформенным инструментарием.
Mono - достойная платформа (см. этот ТАК вопрос задан около недели назад), но если вы делаете что-нибудь существенное, я бы выбрал инструментарий, предназначенный для этого.
Кстати, если вы хотите увидеть, как выглядит приложение .NET GUI на Mono, вот сообщение, которое я делал всякий раз, когда у меня был графический интерфейс NUnit, работающий на Mono:
http://www.cornetdesign.com/2006/07/nunit-gui-running-green-on-monolinux.html
Другой относительно новый вариант кроссплатформенной разработки .NET - это использование платформы Eto.Forms с открытым исходным кодом, которая позволяет использовать одну базу кода пользовательского интерфейса, нацеленную на собственный инструментарий каждой платформы.
Для Windows он использует WinForms или WPF, для Linux он использует GTK #, а для OS X он использует MonoMac / Cocoa.
Также в разработке находятся мобильные порты (iOS / Android).
Есть ли проблемы с разработкой пользовательского интерфейса в Mono? Вы должны сами катить?