2010-05-04 18 views
9

¿Qué se suele hacer para ejecutar una aplicación WinForms en una máquina Mac o Linux?¿Cómo es realmente el framework .Net multiplataforma?

a. Solo copie y ejecute (suponiendo que tengan un Framework instalado).
b. Reconstruir.
c. Modificaciones de código fuente cosmético.
d. Pesadas modificaciones al código fuente y rediseño de formularios.

Suponiendo que la aplicación se desarrolla como código C# 3 administrado al 100% por medio de Visual C# Express o Visual Studio 2008 como objetivo .Net Framework 3.5, desarrollado sin utilizar componentes/librerías de terceros, sin encapsular código no administrado o cualquier hacks de bajo nivel: solo se utiliza la API estándar de .NET Framework C documentada por Microsoft). O las mismas condiciones pero el lenguaje C# 4, .Net Framework 4 y Visual Studio 2010.

¿Existe alguna guía práctica para desarrollar aplicaciones Mono-Ready mientras se usa MS .Net Framework y Visual Studio? Cualquier guía, consejos, aspectos destacados específicos, información a un desarrollador de lo que realmente necesita tener en cuenta para escribir una aplicación fácilmente portátil sin tener que buscar todas las funciones en la referencia Mono mientras se codifica en Visual Studio.

Respuesta

12

Es posible que su aplicación se ejecute con cero modificaciones, pero aún no he visto que eso suceda en el mundo real.

Una herramienta que puede ayudarle mucho es MoMA. MoMA está hecho por las mismas personas que hacen Mono, y le dirá si está utilizando alguna característica que aún no haya sido portada.

En general, .NET 3.5 y Winforms están generalmente bien. La compatibilidad con la versión 4 todavía está en desarrollo.

Una herramienta más actualizada, si está haciendo su desarrollo en Windows, es el .NET Portability Analyzer de Microsoft. Esto se puede usar a través de Visual Studio.

+1

(Puede obtener más detalles en http://www.mono-project.com/Compatibility) – andypaxo

+0

"Es posible que su aplicación simplemente ejecute con cero modificaciones "- Apenas puedo creer en esto, ya que una aplicación creada y ejecutándose en una máquina con Windows es un archivo EXE de Windows (a diferencia de Java, cuyos archivos JAR no son específicos de la plataforma). ¿Quiere decir que .Net EXE está destinado a ejecutarse en Mac o Linux con Mono instalado sin Wine? – Ivan

+10

@Ivan Sí, un ejecutable .NET no es un binario normal de Windows, es un archivo que contiene código que se ejecuta en una máquina virtual (CLR), muy parecido a Java. – andypaxo

5

Si se trata de una aplicación de Windows Forms, con controles estándar de Windows Forms y sin componentes de terceros, normalmente puede ejecutar esto en Mono directamente, simplemente haciendo una copia y ejecución.

Mono admite Windows Forms y C# 3 características muy bien.

Sin embargo, si utiliza componentes nativos, acceso a datos fuera de lo que es compatible con Mono o WPF, se encontrará con problemas. C# 4/.NET 4 probablemente tampoco funcione en este punto.

+0

Todavía experimento algo mal con resx y libgdiplus. :) Afortunadamente se pueden solucionar. –

0

Teórica, .Net es completamente multiplataforma, ya que no depende de una arquitectura específica, sino de una máquina virtual.

En la práctica, sin embargo, tiene la implementación de Microsoft para Windows, y la implementación mono para Linux/Mac. El problema principal es que las implementaciones pueden diferir entre sí, lo que hace difícil ejecutar una aplicación en varias máquinas listas para usar.

El código fuente no debería tener que ser alterado, si no algunas de las bibliotecas no están transportadas a mono, o si se usan diferentes bibliotecas.

C# 4 puede ser un poco más difícil, porque mono aún no está actualizado para la implementación de Microsoft.

+2

La cosa es que Mono hace _un_soporte_ de pruebas contra Microsoft.NET, incluyendo, si no me equivoco, la duplicación de las peculiaridades de implementación donde MS.NET difiere de los estándares ECMA CLR. Donde surgen incompatibilidades entre las dos implementaciones de CLR generalmente son nuevas en Microsoft o incompletas en Mono. –

1

Bueno, no desarrollé grandes proyectos, pero desde mi experiencia, tendrías que introducir algunas modificaciones menores a tu código, pero solo para refinar algunas cosas. La aplicación en sí debería funcionar bien sin recompilación.En cuanto a las formas de Windows, me pareció extremadamente lento algunas veces cuando trabajaba con GDi, pero tal vez solo estaba haciendo algo mal. Sin embargo, el equipo de Mono afirma que tiene soporte completo de formularios de Windows.

Una cosa más que vale la pena mencionar. Es realmente difícil escribir una aplicación multiplataforma, que no será dura sin utilizar algunas funciones nativas del sistema operativo. Creo que siempre debería considerar la posibilidad de escribir algunos módulos adicionales específicos del sistema operativo para proporcionar una estrecha integración con el sistema operativo subyacente y aprovechar algunas cosas interesantes (como las impresionantes funciones de la barra de herramientas en OSX). También debe recordar que las personas están acostumbradas a una apariencia diferente & se sienten en diferentes sistemas operativos