c# windows linux mono

c# - ¿Se está desarrollando en multiplataforma Mono?



windows linux (4)

Desarrollar en Mono es definitivamente multiplataforma con un protector de advertencia :

  • Esforzarse por mantenerse alejado de las API específicas de Windows
  • No hay interoperabilidad con las API nativas de Windows ... o ... puede #ifdef fuera de la API de Windows y proporcionar su propio contenedor Mono para minimizar los cambios de código, por ejemplo, hay un contenedor DLL que utiliza Interop para invocar un método Win32 como ''GetFont'', este es un ejemplo hipotético, GetFont devolverá la información de la Fuente, bajo Mono, que no existe pero que sin embargo puede crear un contenedor falso que no devuelve nada e incorporará la macro #ifdef para usar el contenedor al compilar bajo Mono, y apague la macro al compilar en Windows, la forma de implementar el contenedor depende de usted.
  • No utilice propiedades de GUI avanzadas que pueden no estar presentes en Mono.
  • Utilice la propiedad Environment como NewLine para que sea independiente de CR de Unix y CRLF de Win32, lo mismo se aplica para Separador de ruta, para Unix ''/'' y para Win32 ''/'.
  • La serialización es ligeramente diferente en Mono, usted serializa un objeto en Mono, no se engañe pensando que se des-serializará en Win32 y viceversa.

Por último, pero no menos importante, siga revisando de Mono a Win32 y, de nuevo, siga probando y probando.

¿En qué medida se está desarrollando con mono multiplataforma? ¿Cómo compilo para Windows (en Linux), cómo ejecuto cosas en Linux (porque no hay un compilador JIT .NET)?

¿Cuáles son las particularidades del desarrollo con Mono? ¿Cuáles son las ventajas de desarrollar con Visual Studio (excepto en el caso de multiplataforma)?


Gran parte del tiempo de ejecución mono es compatible con el CLR, ya que siguen el mismo estándar.

Esto significa que una vez que compile su código (en Mono o visual studio), siempre y cuando se asegure de usar solo las funciones compatibles con ambas (por ejemplo, sin WMI en mono) y escriba su aplicación para que sea consciente de la plataforma, usando las mejores prácticas (los ejemplos utilizan Path.Combine para crear rutas de archivos y directorios, usando Environment.NewLine para generar nuevas líneas y más), su aplicación puede ejecutarse sin modificaciones en cualquier plataforma que tenga Mono o CLR (esto incluye Windows, Linux y Mac) .

Puede desarrollar con mono en Visual Studio, por lo que la parte de su pregunta relacionada con esto es discutible.


La única ventaja del desarrollo de Mono es que puede utilizar un entorno Mac OS X o Linux. Pero si tiene una opción, nunca deje Visual Studio. Según mi conocimiento, Visual Studio es el mejor IDE disponible para desarrollo en C # y VB.


Mono en sí es multiplataforma.

Al desarrollar específicamente con mono, podrá ejecutar su ejecutable en cualquier plataforma que tenga mono disponible para él. Eso en sí mismo es la mayor ventaja de mono sobre el desarrollo en la plataforma .Net de MSFT. Dicho de otra manera: si construye su ensamblaje con mono, está garantizado el soporte multiplataforma, mientras que construir con .Net puede no darle eso.

Mono ha realizado algunas actualizaciones a las deficiencias en .Net (por ejemplo, Mono.security ofreció características que no se encuentran en .Net 2.0, aunque creo que MSFT las recogió para versiones posteriores).

Es posible construir un ensamblado .Net usando Visual Studio, y hacer que Mono lo ejecute, sin embargo, su ensamblaje debe tener cuidado de usar solo los marcos / bibliotecas que admite Mono , y que cualquier ensamblado no administrado al que hace referencia su ensamblaje está disponible para su OS elegido. En otras palabras: si su ensamblaje utiliza un archivo DLL de C ++ en Windows, debe asegurarse de tener el archivo .a / .so correcto para Linux.

Para ejecutar su ensamblaje .net en Linux (suponiendo que mono está instalado correctamente) escriba: mono myprogram.exe