¿Hay alguna forma compatible de ejecutar aplicaciones .NET 4.0 de forma nativa en una Mac?

11

¿Cuáles son las opciones admitidas por Microsoft para ejecutar código C # / .NET 4.0 de forma nativa en Mac? Sí, sé acerca de Mono, pero entre otras cosas, se queda atrás de Microsoft. Y Silverlight solo funciona en un navegador web. Una solución de tipo VMWare tampoco es suficiente.

¿Hay alguna respuesta semi-autorizada de por qué Microsoft simplemente no admite .NET en la Mac misma? Parece que podrían Silverlight y / o comprar Mono y estar rápidamente allí. No hay necesidad de Visual Studio nativo; La compilación cruzada y la depuración remota están bien.

La razón es que donde trabajo hay una creciente incertidumbre sobre el futuro, lo que está causando que se desarrolle mucho más en C ++ en lugar de C #; nuevos proyectos eligen usar C ++. Nadie quiere decirle a la gerencia dentro de 18 a 24 meses "lo siento" si la Mac (o iPad) se convierte en un requisito. C ++ es visto como la opción más segura, incluso si (posiblemente) signifique una pérdida de productividad hoy.

Ðаn
fuente
2
¿Apoyado por quién?
¿Por qué realmente te importa si la MS lo admite? En mi opinión, debería importar más si Apple lo admite si desea apuntar a Mac.
alternativa
Ir con C ++ no es una mala idea. Puede tener una base de código portátil y usar la GUI nativa en cada plataforma.
mike30 01 de
1
Para actualizar esta publicación, parece que MS se ha dado cuenta y comenzarán a admitir .NET en diferentes sistemas operativos, aunque no está claro cómo se hará. Puede crear aplicaciones multiplataforma con .NET utilizando NOV: nevron.com/products-open-vision.aspx (trabajo para esta empresa). En general, le permite codificar en C # en Windows y luego compilar para Wpf, MAC, Silverlight y pronto para iOS y Android. Hay una edición gratuita (comunitaria) de este producto, por lo que no hay necesidad de sacrificar la productividad y seguir con C ++ arcano.
Bob Milanov

Respuestas:

17

¿Hay alguna respuesta semi-autorizada a por qué Microsoft simplemente no admite .NET en la Mac misma?

Probablemente, la mejor respuesta es que no solo "admite" .NET en la Mac. Gasta cientos de millones de dólares y varios años portando .NET a la Mac.

Si bien algunas cosas están completamente administradas y no requerirían portabilidad, la mayoría son envoltorios alrededor de la API Win32 (ventanas, controles, gdi +, criptografía, directorio activo, COM, servicios empresariales, acceso a dispositivos, sonido, video, códecs, winforms, etc. etc)

Cada uno de estos tendría que resumirse en el backend y reasignarse a bibliotecas nativas equivalentes en OSX. Por supuesto, no habrá un mapeo limpio y agradable, por lo que también debe escribir hacks sobre hacks para que funcione exactamente igual.

Luego está el problema de que estas API en OSX pueden ser frágiles y Apple no es muy bueno en la compatibilidad con versiones anteriores, por lo que puede rehacer sus hacks con cada versión principal (y, a veces, versiones menores y revisiones), acumulando un alto costo de mantenimiento.

Básicamente, es una enorme cantidad de dinero y trabajo para muy poca ganancia en una plataforma cuyo propietario estaría en contra de que lo haga de todos modos. Y realmente no desea gastar dinero para ayudar a las personas a migrar de su propia plataforma a la de su competencia.

Así que te quedan opciones de plataforma cruzada no perfectas:

  • C ++, que aún requerirá portabilidad en el futuro
  • Silverlight fuera del navegador, para soporte de Microsoft
  • Mono, que hace el trabajo para admitir un subconjunto saludable de .NET, pero no es Microsoft
jpobst
fuente
55
You spend hundreds of millions of dollars and several years porting .NET to the Mac.¿Disculpe? Ese número suena un poco alto ... Estoy bastante seguro de que el Mono-Framework (con soporte para muchos más sistemas operativos) no costó tanto.
Bobby
1
@Bobby: eso es lo que estoy pensando. Mono + Silverlight parece la mayor parte del camino. Agregue a eso algo de P / Invoke y / o C ++ / CLI para cosas menos convencionales (Criptografía, AD, etc.) y creo que tendría una solución bastante razonable a un costo razonable. Mi argumento es que Microsoft QUIERE gastar dinero ayudando a las personas a acceder a OSX; si no lo hacen, la gente dejará de usar C # /. NET en Windows.
El
@Dan: Exactamente, Microsoft no quiere ser compatible con el mundo, de lo contrario, el mundo podría usar algo diferente. ;)
Bobby
15
El marco Mono tampoco es una solución completa, totalmente probada, documentada y compatible. Hay una diferencia en lo que es "suficientemente bueno" para el código abierto y la calidad que la gente espera de Microsoft. Les costaría fácilmente cientos de millones de dólares hacerlo al nivel que exigirían los usuarios. Lo que podrían hacer para disminuir la inversión sería elegir un subconjunto popular (y portátil) del marco .NET y simplemente hacerlo. Eso es lo que eligieron hacer, lo llaman "Silverlight".
jpobst
@jpobst, pero parece que MS ha hecho exactamente eso ... ¿y más?
El
14

No, Silverlight es la única opción de Microsoft de .Net en OS X. Mono no se "retrasa" tanto como cree; es compatible con .Net 4.0 y C # 4, por ejemplo. Sin embargo, los kits de herramientas de la interfaz de usuario (WinForms y WPF) no son compatibles con OS X. Mono no es compatible con WPF en absoluto. Tampoco podría Microsoft sin reescribir todo el motor de renderizado. Eso probablemente está bien, sin embargo. Si desea escribir una aplicación nativa de Mac, debería estar escribiendo una interfaz de usuario nativa (quizás usando MonoMac).

Barry Wark
fuente
La administración no parece muy inclinada a aceptar la opción Mono. Y ciertamente no era compatible con .NET 4.0 el mismo día que en Windows (¿o?).
El
¿Silverlight ya no está en el frente de WPF? Sí, el XAML necesitaría ser diferente para obtener una apariencia de Mac.
El
2
@Dan: la forma en que Mono se mueve en estos días, si comienzas a desarrollar una aplicación para la última versión de .NET cuando Microsoft la lance, Mono admitirá esa misma versión cuando la aplicación esté lista para enviarse.
Anon
@Dan SL y WPF debajo de las cubiertas están intentando fusionarse tanto como sea posible. Existen diferencias técnicas, pero los conceptos fundamentales son multiplataforma.
Aaron McIver
66
Si la administración de su empresa no está dispuesta a usar Mono, no podrá hacer que una aplicación de escritorio escrita en C # 4.0 tradicional sea así de simple.
Ramhound
4

Silverlight no es solo un navegador . Desde la versión 3 OOB ha existido y sería la ruta que tomaría si una plataforma compatible con Microsoft es imprescindible.

Si bien Mono puede retrasarse, no está tan eliminado de la pila de .NET como puede pensar y no debe descartarse como una opción viable.

En cuanto a por qué Microsoft no implementa toda la pila .NET; ROI

Aaron McIver
fuente
Pero parece que están tan cerca de Silverlight ... ¿por qué no simplemente terminar el trabajo? Eso parecería mucho mejor para todo el mundo que Mono ingeniería inversa del compilador, CLR, etc.
Ðаn
1
SL no es toda la pila .NET. El tiempo de ejecución de SL frente a toda la pila .NET son animales completamente diferentes.
Aaron McIver
Sí, pero dado que ya puede hacer cosas como OOB como sugiere con SL, ¿por qué no transferir el resto (1/3? 40%?) De la pila .NET? ¿O es SL realmente nada más que un intento de matar a Flash?
El
@Dan Cuando las empresas están empujando cosas a la nube ... lo último que quieres hacer es portar una pila que no pueda ejecutarse en la nube. SL puede ejecutarse en todos los navegadores. Puede discutir con los gustos de Google y otros, el impulso para trabajar dentro de un navegador es real. ¿Por qué en este momento optaría por transferir una pila completa a un sistema operativo con <10% de cuota de mercado junto con la virtualización tan frecuente en la actualidad?
Aaron McIver
Microsoft (posiblemente) tiene el mejor entorno de desarrollo disponible hoy en día con C # y .NET. Pero las compañías como la mía se alejarán cada vez más debido a la incertidumbre que rodea a Mac / iPad / cloud / etc. C ++ parece mucho más seguro.
El
3

La mayor parte de las ganancias de Microsoft proviene de dos productos: Windows y Office. La compatibilidad multiplataforma dañaría a Windows.

Si realmente desea que el mismo código se ejecute multiplataforma, escriba una aplicación web. Sin embargo, no suena como tú. "Por si acaso" no es una buena razón, es un cambio de alcance.

Incluso si decide apuntar a Mac OS X o iOS en 16 meses a partir de ahora, ¿realmente cree que podría tomar su código C ++ existente y convertirlo en una buena aplicación nativa (o incluso funcional)? A menos que estés trabajando en un juego de pantalla completa, la respuesta es no.

Ahorre tiempo con C # ahora, y si decide pasar a la Mac, vuelva a escribirlo de la manera Mac con Objective-C y Cocoa; sus usuarios se lo agradecerán.

Tobias Cohen
fuente
1
"Por si acaso" es la realidad; nadie quiere decirle a la gerencia "Uy" cuando hay una opción más segura en C ++.
El
1
Suponiendo que el código de la interfaz esté separado adecuadamente, será más fácil mover el código C ++ a la Mac. Vuelva a escribir la interfaz en Objective-C usando Cocoa, enlace al resto y tendrá todo el trabajo hecho.
David Thornley
@David: y de ahí el problema detrás de esta pregunta: más C ++, (mucho) menos C #. ¡Me gusta (realmente) C #!
El
Estas preocupaciones multiplataforma aquí es la razón por la cual muchos de nosotros todavía estamos usando Java y no nos estamos moviendo a C #.
Brian Knoblauch
1

¿Hay alguna respuesta semi-autorizada a por qué Microsoft simplemente no admite .NET en la Mac misma?

¿Dónde está el mercado que justificaría que MS gastara el tesoro codificándolo? Para hacer esto, tendrían que gastar mucho dinero en efectivo: millones de dólares en salario. Un proceso continuo, a medida que aparecen correcciones y actualizaciones.

¿Y para qué? ¿Los derechos de fanfarronear? Todo lo que obtienen es la capacidad de las personas de deshacerse de Windows para Apple y aún poder ejecutar sus aplicaciones.

Si alguien se beneficiara de hacer esto, sería Apple. Facilite a las personas la transición a su plataforma y a los desarrolladores (DESARROLLADORES DE DESARROLLADORES) que la codifiquen. ¿Pero crees que a SJ le importa? Prefieren inventar cosas nuevas para pegarse un i enfrente de. Además, la mayor parte del marco es OS y las especificaciones CLR son gratuitas para que cualquiera las implemente. No puedes pegar un NDA sucio en nada de eso.

Estafado
fuente
Parte de "lo que hay para Microsoft" es mantener a las personas usando sus herramientas de primer nivel en Windows. Tal como están las cosas por aquí, C # /. NET se relegará a las aplicaciones internas. Los desarrolladores que han estado usando C # durante años están escribiendo C ++ nuevamente. En cuanto al costo; parece que ya están alrededor de 2/3 con Silverlight y / o Mono.
El
Mono es una plataforma de código abierto, y aunque se ha lanzado la fuente para .NET, .NET Framework NO es de código abierto. Microsoft no podrá comprar Mono, por muchas razones, la principal es que no tienen una sola aplicación de código abierto 100%. ¿Sabe usted que Silverlight es solo un lenguaje dentro de .NET y la razón por la que es multiplataforma porque Microsoft desea que sea un reemplazo para Flash? También debo agregar que Apple ha hecho movimientos con las manos para ni siquiera permitir que esto esté en su sistema operativo.
Ramhound
1
@Dan parece que la solución a sus problemas no es "un idioma para gobernarlos a todos" sino "¿Cómo desplegamos de manera independiente de la plataforma?" La mayoría de la gente está logrando esto al romper la interfaz de usuario de la lógica, integrando uno por plataforma y el otro como un servicio en los innertubes.
Estafado
1
@Dan, tengo una solución para eso ... No codifiques para Mac. Tengo un acuerdo personal de desarrollo para Apple que escribí y firmé yo mismo. Odiaría por completo no poder codificar C #, y así evitaría hacerlo. Pero a veces tienes que hacer lo que tienes que hacer, y si los deseos fueran peces, tendríamos que pensar en otra aliteración para describir las muchas cosas que queremos pero que no podemos tener.
Estafado
1
@Dan kindasorta. Realmente no han tocado el escritorio (todavía). Pero estoy sorprendido de la diferencia que hacen cinco años.
Estafado
0

Puede encontrar útil el proyecto MonoMac: http://www.mono-project.com/MonoMac

Permite el desarrollo de aplicaciones Cocoa estilo Mono, que pueden implementarse en la tienda de aplicaciones Mac.

Consideraría fuertemente este enfoque para un desarrollador que no esté familiarizado con Objective-C pero con .NET / Mono / Java que tiene que entregar una aplicación en un escenario restringido en el tiempo.


fuente
0

Ninguna.

Recomiendo escribir una aplicación C ++ con compilación cruzada, puede que te guste, o usar Ruby con wxWidgets.

Considero que .NET es una mala propuesta para el desarrollo multiplataforma y el mantenimiento de productos a largo plazo. Aunque, hombre, puedes encontrar aplicaciones rápidamente en él. : - /

Wish Delphi seguía siendo un gran contendiente.

Paul Nathan
fuente
1
¿Has oído hablar de Lázaro?
Happy Coder
Además, ¿alguna vez jefe de Java?
Fernando González Sánchez el
0

Si desea ejecutar .NET de forma nativa en una Mac, puede usar BootCamp para hacerlo (es decir, ejecuta Windows en la Mac y sus aplicaciones .NET en Windows).

Si se refería a Mac OS X en lugar de solo el hardware, puede usar VMWare o Parallels para ejecutar las aplicaciones .NET en Windows (en emulación) en OS X. Ambos tienen modos visuales que permiten que su aplicación aparezca como si solo se estuviera ejecutando dentro de OS X (se verá y se comportará como una aplicación de Windows, pero si está escribiendo una aplicación no web multiplataforma sin una interfaz personalizada para cada sistema operativo, siempre tendrá ese problema).

Obtendrá la misma cantidad de "soporte" al hacerlo, ya que está ejecutando la aplicación en Windows, aunque virtualizada. Por supuesto, cualquier persona que ejecute la aplicación necesitará una copia del software de virtualización y Windows, y estará dispuesto a soportar una aplicación que no se comporte como una aplicación de OS X, pero es la única forma de tener "nativo" .NET ejecutándose en una Mac.

Tony Meyer
fuente
0

Dan, no creo que puedas hacer esto. Sin embargo, una posible solución (todavía vapourware) es usar Embarcadero Rad Studio C ++ Builder, que tiene un buen VCL para desarrollar aplicaciones visuales (en las que se basa gran parte de .net), y se rumorea que tienen soporte multiplataforma. en el próximo lanzamiento

Esto se desarrollará en Windows, dirigido a Mac o Linux. O eso dice su hoja de ruta.

El entorno de C ++ es razonable y si se desarrolla contra el VCL, entonces, en teoría, la aplicación simplemente funcionará en las otras plataformas.

Por supuesto, hasta que se envíe, queda por ver cuán efectivo es realmente.

rápidamente_ahora
fuente
-2

La respuesta es no.

En realidad, su caso parece ser un muy buen ejemplo de cuándo no elegir .NET.

Gabriel Magana
fuente
Nadie puede predecir el futuro y nadie quiere asumir riesgos "indebidos".
El
@Dan: ¿Y el punto es? Pareces estar de acuerdo conmigo ...?
Gabriel Magana
-3

Si desea desarrollar para un sistema operativo, utilice las herramientas adecuadas. No hay aplicaciones verdaderamente profesionales escritas en mono para Mac. Por otro lado, hay muchos desarrolladores no profesionales que utilizan muchas herramientas que crean mucha basura. Mire las revisiones de aplicaciones mono que se han escrito para OSX. Los desarrolladores están escribiendo utilizando un marco incompleto pirateado para que coincida con la plataforma OSX. Comience a escribir: si ha utilizado C #, el objetivo C es un aprendizaje rápido.

Los desarrolladores profesionales para Mac usan C ++, Objective C, Cocoa y Xcode. Desarrollo en varias plataformas y cada una tiene sus mejores herramientas. Use Xcode para Mac e iOS.

Como una nota al margen, Xcode no es Visual Studio, no es tan estable y es una desgracia para Apple en comparación, pero funciona bien cuando te acostumbras a él. Es muy difícil vencer a las herramientas de Microsofts, pero fueron escritas para Windows, no para Linux, iOS, OSX, AIX, etc.

Dr. maynord
fuente
1
¿Tiene algún hecho para respaldar declaraciones como "Xcode no es tan estable y es una desgracia para Apple" porque, según mi propia experiencia personal, a todos los que han usado Xcode les ha encantado. Además, incluso después de expresar su opinión personal sobre un tema con el que parece que no está familiarizado, ni siquiera sabe que en 2013, en realidad, existe una solución. Por supuesto, la solución es en realidad Monoy Xamarin.Maces una solución. La versión actual de Mono es una implementación casi completa al 100% de .NET 4.0, solo le faltan un par de características principales que probablemente nunca serán portadas (es decir, WPF).
Ramhound 01 de