2009-04-22 16 views
5

Digamos que por gusto, decido que ya no quiero escribir aplicaciones de escritorio en Java, sino cambiar a usar C#. Quiero ser capaz de construir una aplicación que se ejecutará en una distribución de Linux convencional, y una versión reciente de MS Windows. Tendrá un componente GUI.¿Existe un marco de GUI multiplataforma para C# /. NET?

En Java puedo crear una aplicación que utiliza Swing. Una vez que lo tengo funcionando, puedo copiar ese archivo jar de Windows a Linux o viceversa, dependiendo de dónde lo haya desarrollado. Y generalmente se ejecutará con java -jar myapp.jar.

En C# ¿es posible hacer esto? ¿Existe un equivalente funcional a Swing o AWT en C#?

+1

Usted puede tratar de noviembre: https://www.nevron.com/products-open-vision.aspx. Es funcionalmente equivalente a Swing –

Respuesta

2

Puede intentar WxWidgets. Tiene soporte para C#, entre muchos otros idiomas, y es multiplataforma. El único inconveniente es una recompilación para cada plataforma. Alternativamente, puede probar Mono, que es muy bueno, pero tenga en cuenta que hay un par de inconvenientes con problemas de compatibilidad. Sin embargo, no existe un archivo predefinido de "ejecutar en cualquier lugar" para las aplicaciones de C#, como Java con jars, lo mejor es recompilar para cada plataforma si desea garantizar la compatibilidad.

2

Lo más parecido que he visto es Mono, aunque no es compatible con todas las bibliotecas CLR, creo, pero es multiplataforma.

5

Creo que una buena parte de WinForms se implementa en Mono. Necesitas instalar Mono en Linux para eso. Sin embargo, puede tener problemas de compatibilidad, ya que Mono no es un esfuerzo de Microsoft y oficialmente no es compatible con ellos.

+3

Sí, pero es un esfuerzo comunitario muy * bueno *, y solo he visto problemas de compatibilidad cuando estaba haciendo algo completamente ridículo (los comentarios son demasiado cortos para describir: D). La programación normal de escritorio generalmente está bien. –

+0

@ person-b, estoy de acuerdo, es un muy buen esfuerzo de la comunidad :-) –

+2

Por lo que yo sé, se implementa todo WinForms 2.0. –

13

Probablemente GTK# sería el más cercano.

Sé que otros han dicho mono, pero eso no está del todo bien. .Net está en mono, ya que Java VM de Microsoft está en el tiempo de ejecución Java de Sun. Mono no está realmente en el mismo espacio conceptual que Swing. Para eso, GTK # es una coincidencia más cercana.

+2

Sé lo que estás diciendo, en su pregunta me preguntó sobre AWT o Swing, pero lo que creo que realmente está preguntando es "¿cómo puedo escribir aplicaciones multiplataforma C#?". –

5

This page tiene una lista de los juegos de herramientas GUI compatibles con Mono, incluidos los pros y los contras de cada uno de ellos. Como otros han sugerido, WinForms, GTK # y wxNet son todas opciones viables.

0

Windows.Forms es la biblioteca estándar para desarrollar aplicaciones GUI para .NET

A pesar de ser muy bien soportado en Windows, versión 2.0 está totalmente implementado por Mono también, lo que hace que esté disponible en todas las plataformas soportadas por Mono .

WPF, por el contrario, es una nueva biblioteca conceptual, por ahora es totalmente compatible principalmente en Windows y solo un subconjunto de ella soportado por Mono por su implementación de Silverlight: Moonlight.

Si está creando aplicaciones para el uso multiplataforma productivo y/o tiene limitaciones conservadoras de rendimiento, vaya a Windows Forms.

Si desea experimentar y aprender algo nuevo o si está desarrollando una nueva aplicación para Windows, vaya a WPF. Esta es la nueva tecnología para aplicaciones de GUI de cliente.

+0

Mono no puede ejecutar Windows.Forms en Linus o Mac ya que Windows.Forms depende de las llamadas a la API de Win32. –

16

Hay Eto.Forms (en github), que es una capa de abstracción sobre WPF, WinForms, GTK, y MonoMac/Cacao - para que pueda obtener una interfaz de usuario nativa en todas las plataformas sin tener para volver a implementar para cada plataforma.No tiene que sufrir el denominador común más bajo, ya que puede implementar especificaciones para cada plataforma (si lo desea, pero no es obligatorio).

Tiene la ventaja de que es .NET puro y solo depende de las dependencias proporcionadas por el sistema operativo, en lugar de utilizar GTK o WxWidgets donde tendrías que agrupar los archivos binarios nativos para varias plataformas.

+0

¡Hola! ¿Puedo usar Eto.Forms con Gtk # en Windows? ¡Gracias! –

+0

@ user2656632 sí, ciertamente puedes. Simplemente pase la plataforma adecuada al constructor de Eto.Forms.Application. (; – Curtis

2

Para iOS, Android y Windows Mobile, hay Xamarin.Forms. http://xamarin.com/forms Esta es una capa de abstracción que le permite escribir código multiplataforma, que se une a los kits de herramientas GUI nativos bajo el capó.

Busco más soluciones como esto - me importa no sólo sobre plataformas móviles, sino también a las plataformas de escritorio (Windows, Mac OSX, de ala/Ubuntu/etc Linux)

3

Ésta es una pregunta más viejo, pero como una actualización, una combinación de Mono y Xamarin debería funcionar para sus modernas necesidades multiplataforma.

http://www.mono-project.com/docs/gui/winforms/

Microsoft acaba de .NET de código abierto y se compromete a traer el núcleo .NET para Linux y MacOS con su próxima versión. Microsoft también ha formado una estrecha asociación con Mono y Xamarin, específicamente para ayudar con sus bibliotecas de Android y Linux.

http://www.hanselman.com/blog/AnnouncingNET2015NETAsOpenSourceNETOnMacAndLinuxAndVisualStudioCommunity.aspx