2008-09-11 16 views
6

Si tuviera que escribir una aplicación GUI que se ejecuta localmente y llama a un servicio web, para ser multiplataforma, ¿puede hacerlo con .Net, qué herramientas recomendaría?plataforma cruzada .Net?

Estaba considerando Java, ya que sería relativamente fácil de recuperar debido a su similitud C# y luego podría utilizar la JVM.

Respuesta

9

Debe familiarizarse con Mono project y MonoDevelop; el propósito expreso de esos proyectos es permitir construir y ejecutar el código .NET en una variedad de plataformas, incluyendo Windows, Linux y Mac OSX.

Dado que el Mono es una reimplementación de .NET, siempre queda algo por detrás de Microsoft.NET, pero tienen una buena cobertura de .NET 2.0 y algunas características de .NET 3.x. Tenga en cuenta que Mono ejecuta binarios .NET, por lo que siempre que las características de su programa sean compatibles con Mono, puede tomar una aplicación EXE que haya cumplido en Windows y ejecutarla en Linux/Mono sin volver a compilar.

+0

¿Hay algún problema con el desarrollo de la interfaz de usuario en Mono? ¿Tienes que hacer tu propio? – Dan

+0

Mono tiene soporte para Winforms y ASP.NET 2.0 y soporte parcial para las características 3.x, por lo que no necesita ejecutar el suyo propio. –

+0

La única advertencia que conozco con respecto a la ejecución del código .Net en Mono que se compiló en Windows es el uso de PInvoke (llamando a las API de Win32), lo que no sorprendentemente no es totalmente compatible con Mono en Linux o Mac. Esto no será un problema para su aplicación GUI que llama a un servicio web: o) – Andrew

2

Mono es la única opción actualmente. Se ejecuta en these platforms. Y habrá problemas, no necesariamente enormes, pero aún así.

+0

Mono no es la única opción actual: REALsoftware tiene un producto llamado REALbasic que puede compilar el mismo proyecto en ejecutables nativos para Windows, Mac y Linux: http: // www.realsoftware.com/products/realbasic/ – Andrew

+1

Mono realmente es la única opción seria. REALBasic no tiene nada que ver con .NET Framework y esta pregunta fue sobre el desarrollo de plataforma cruzada .NET. –

+0

Gracias por la corrección, lubos: o) – Andrew

3

Será mejor que lo escriba utilizando un conjunto de herramientas multiplataforma. Lo más probable es que no puedas utilizar un buen diseñador visual (realmente esto depende del kit de herramientas que elijas), pero escribir UI a mano no es realmente tan difícil. Los chicos de HTML lo hacen todo el tiempo y es una práctica bastante común también en el mundo que no es MS.

Algunos juegos de herramientas de interfaz de usuario multi-plataforma .NET con fijaciones

  • GTK# (estándar de-facto para el desarrollo de Mono, MonoDevelop IDE ha construido en un diseñador de formularios que está utilizando este kit de herramientas)
  • wxNET (basado en wxWindows, bastante maduro pero tendrás que construir tu UI a mano)
  • Qyoto (basado en QT, es probablemente mejor que wxWindows pero es posible que necesites una licencia comercial de Trolltech si encendido no puede tener licencia de código abierto)
+0

¿Por qué no utilizar las Winforms integradas de mono? No usar Winforms hará que la implementación sea más complicada. –

+0

porque la compatibilidad con WinForms solo la mantienen los desarrolladores Mono y, como puede ver en su sitio web, sigue siendo su segunda prioridad. El primero es GTK #. GTK +, wxWindows y QT tienen equipos mucho más grandes y más dedicados que WinForms en Mono, así que no apostaría a la compatibilidad con WinForms de larga duración en Mono –

+0

En realidad, Qt está licenciado bajo la LGPL durante casi exactamente dos años, no es necesario para obtener una licencia, incluso si su software es propietario. Además, Nokia ahora ejecuta Qt. –

0

Como dije anteriormente, The Mono Project es su mejor apuesta dado su apoyo de la comunidad.

Si está en Visual Basic, entonces también vale la pena mirar REALbasic, ya que tiene un compilador cruzado que crea ejecutables nativos. Tienen una edición de prueba que puedes download too

0

Recientemente escribí una pequeña aplicación de GUI de C# en Linux, compilando y ejecutándome usando mono. Descubrí que tenía que usar el compilador "gmcs" para tener acceso a las características modernas de C# y .Net (mono 1.9 se envía con varios compiladores diferentes).

Y al compilar el archivo .exe, encontré que tenía que agregar el modificador "-target: winexe" para hacer que la aplicación se ejecutara en Windows sin tener una línea de comando emergente detrás de la aplicación.

Todavía tengo que descubrir cómo compilar una aplicación .Net que en Windows se ejecutará desde unidades de red sin requerir especial.Configuración de seguridad de red en la PC. (Creo que este es un problema general con las aplicaciones .Net, pero todavía estoy aprendiendo.)

3

Un consejo. La programación multiplataforma es como la programación multiproveedor y la única cosa segura que hacer es probar, probar y probar en todas las plataformas que desee admitir.

-1

Honestamente evaluaría su base de clientes y sus habilidades existentes. Si tiene una división de 50/50, o incluso una división de 70/30 de Windows a no de Windows, probablemente sería mejor con Java o algún otro kit de herramientas multiplataforma.

Mono es una plataforma decente (consulte this SO question asked about a week ago), pero si está haciendo algo significativo, iría con un conjunto de herramientas diseñado para ello.

Por cierto, si quieres ver lo que es una aplicación GUI .NET se parece en Mono, aquí hay un post que hice cuando llegué la GUI NUnit que se ejecuta en Mono:

http://www.cornetdesign.com/2006/07/nunit-gui-running-green-on-monolinux.html

7

Otro relativamente nuevo La opción para el desarrollo .NET multiplataforma consiste en utilizar el Framework de Eto.Forms de código abierto, que le permite tener un objetivo de base de código UI para cada kit de herramientas nativo de cada plataforma.

Para Windows, usa WinForms o WPF, para Linux, usa GTK #, y para OS X usa MonoMac/Cocoa.

También hay puertos móviles (iOS/Android) en desarrollo.

https://github.com/picoe/Eto

Cuestiones relacionadas