Pregunta

Estoy buscando a escribir algo de código de C# para linux/windows/mac/cualquier otra plataforma, y estoy buscando las mejores prácticas para la portátil de código.

Proyecto mono tiene algunos grandes la portabilidad recursos.

¿Cuáles son las mejores prácticas para la portátil de C#?

¿Fue útil?

Solución

De hecho, he utilizado winforms y estaba bien.Estaba a TOPE FEO, pero funcionó.

Obviamente, no utilice P/Invoke, o cualquier win32 cosas como el registro.También ser conscientes de cualquier tercero DLL.Por ejemplo, podemos utilizar a un tercero SQLite dll que contiene el código nativo en la que tenemos que cambiar si queremos ejecutar en OSX/linux.

Otros consejos

Odio el término "Mejores prácticas", porque parece que algunas de las prácticas puede ser el mejor en cualquier contexto, que es una cosa arriesgada, pero yo voy a decir lo que me parece una "Buena práctica" para la multi-plataforma de código (y para la mayoría de otro tipo de desarrollo):

El uso continuo de motor de integración y construir para todas las plataformas de destino todo el tiempo.

Suena demasiado complejo?Bien, si usted realmente necesita para el soporte de múltiples plataformas, mejor hacerlo.No importa qué tan cuidadoso sea con su código y uso de la biblioteca, si la prueba es demasiado tarde, usted se encontrará gastando muchísimo horas reelaboración de grandes porciones de la aplicación.

Reloj hacia fuera para nada que ver con el nombre de archivo y ruta de acceso de la manipulación y hacer uso de la portátil .NET métodos en Sistema.IO.Camino es decir.

en lugar de:

string myfile = somepath + "\\file.txt";

hacer:

string myfile = Path.Combine(somepath, "file.txt");

Si necesita especificar un separador de ruta entonces se puede utilizar Ruta de acceso.Separador de etc

No utilizar " " para una nueva línea.Uso Medio ambiente.NewLine

Recuerde :

  • *NIX utiliza sólo el carácter de nueva línea (" ")
  • Windows utiliza " "
  • MacIntosh utiliza " " (no estoy muy seguro acerca de esto - siéntase libre de corregirme).

L. E.:Parece que algunos de los nuevos MacOSes no utiliza el " " separador de línea más.

No uso Windows.Formas de GUIs, pero Mono, probablemente, mencionó que ya.Gtk# es mucho más consistente y confiable para la cruz de la plataforma de GUIs.

Hace un par de años me habría aconsejado comprar a ti mismo una copia de mi libro en la cruz-plataforma .NET, pero como el libro es un poco fuera de fecha, ahora que usted realmente necesita pegarse a la info de el Mono sitio.

El Mono De Migración Analyzer (MoMA) la herramienta es muy buena para el análisis de un exsisting .NETO de la aplicación y la advertencia de problemas de portabilidad, pero la mejor apuesta para el nuevo código es el uso de la última versión estable de Mono para su trabajo de desarrollo.

Como Orion dijo usted necesita tener cuidado al utilizar la 3ª parte de Dll, a pesar de que mi co-autor escribió un NativeProbe herramienta para analizar archivos Dll para P/Invoke dependenecies si desea comprobar rápidamente 3rd party software.

Si usted está decidido a desarrollar en MS .NET, a continuación, usted debe tratar de asegurarse de que también se construye y prueba de unidad en Mono, y usted también debe mirar hacia fuera para un número de Ventanas de nombres específicos, tales como el de Microsoft.Win32 y del Sistema.Gestión de espacios de nombres.

Si desea que el código para ser portable, debe revisar cuidadosamente la lista completa de las características del Mono sitio.De entrar en detalle en cada clase en el marco, y el nivel de integridad.Usted tendrá que tomar estas cosas en cuenta durante el proceso de diseño para no ir muy lejos por un camino y descubrir que una característica fundamental aún no ha sido implementado.

Hay algunas otras cosas simples.Como no suponga ruta de caracteres.O saltos de línea.

Yo soy una de las personas que regularmente se compila NUnit en Mono en Linux o OSX.

Además, no asumir que los compiladores de trabajo exactamente el mismo.Hemos encontrado un problema recientemente, donde el MS compilador de C# que parece ser incluidos cosas que el Mono no, necesidad de más referencias en nuestro script de compilación.

Aparte de eso, ha sido bastante sencillo.Recuerdo la primera vez que tenemos la interfaz gráfica de usuario que se ejecuta en Mono/Linux - fue muy emocionante (aunque fue bastante feo)

La falta de un solo elemento:Asegúrese de que los nombres de archivo son sensibles a las mayúsculas.Archivo.Open ("MyFile.txt");no va a funcionar en Unix si el archivo se denomina myfile.txt.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top