Existe-t-il un moyen pris en charge pour exécuter des applications .NET 4.0 en mode natif sur un Mac?


11

Le cas échéant, quelles sont les options prises en charge par Microsoft pour exécuter le code C # /. NET 4.0 en mode natif sur Mac? Oui, je connais Mono, mais entre autres, il est en retard sur Microsoft. Et Silverlight ne fonctionne que dans un navigateur Web. Une solution de type VMWare ne suffira pas non plus.

Existe-t-il une réponse semi-officielle à la raison pour laquelle Microsoft ne prend tout simplement pas en charge .NET sur le Mac lui-même? Il semblerait qu'ils pourraient Silverlight et / ou acheter Mono et être rapidement là. Pas besoin de Visual Studio natif; la compilation croisée et le débogage à distance conviennent.

La raison en est que là où je travaille, il y a une incertitude croissante quant à l'avenir, ce qui entraîne beaucoup plus de développement à faire en C ++ au lieu de C #; de nouveaux projets choisissent d'utiliser C ++. Personne ne veut dire à la direction dans les 18 à 24 mois "désolé" si le Mac (ou l'iPad) devient une exigence. Le C ++ est considéré comme l'option la plus sûre, même si cela (sans doute) signifie une perte de productivité aujourd'hui.


2
Soutenu par qui?

Pourquoi vous souciez-vous réellement si la SP le soutient? OMI, cela devrait avoir plus d'importance si Apple le prend en charge si vous souhaitez cibler Mac.
alternative

Aller avec C ++ n'est pas une mauvaise idée. Vous pouvez avoir une base de code portable et utiliser les interfaces graphiques natives sur chaque plate-forme.
mike30

1
Pour mettre à jour ce message, il semble que MS ait pris note et ils commenceront à prendre en charge .NET sur différents systèmes d'exploitation, mais la façon dont cela sera fait n'est pas claire. Vous pouvez créer des applications multiplates-formes avec .NET en utilisant NOV: nevron.com/products-open-vision.aspx (je travaille pour cette entreprise). Il vous permet généralement de coder en C # sur Windows puis de compiler pour Wpf, MAC, Silverlight et bientôt pour iOS et Android. Il existe une édition gratuite (communautaire) de ce produit, il n'est donc pas nécessaire de sacrifier la productivité et de s'en tenir aux arcanes C ++.
Bob Milanov

Réponses:


17

Existe-t-il une réponse semi-officielle à la raison pour laquelle Microsoft ne prend tout simplement pas en charge .NET sur le Mac lui-même?

La meilleure réponse est probablement que vous ne "supportez" pas simplement .NET sur Mac. Vous dépensez des centaines de millions de dollars et plusieurs années à porter .NET sur Mac.

Bien que certaines choses soient entièrement gérées et ne nécessitent pas de portage, la plupart des choses sont des wrappers autour de l'API Win32 (fenêtres, contrôles, gdi +, cryptographie, Active Directory, COM, services d'entreprise, accès aux périphériques, son, vidéo, codecs, Winforms, etc.) etc).

Chacun d'eux devrait être résumé dans le backend et remappé vers des bibliothèques natives équivalentes sur OSX. Bien sûr, il n'y aura pas de bonne cartographie propre, vous devez donc également écrire des hacks sur des hacks pour qu'il fonctionne exactement de la même manière.

Ensuite, il y a le problème que ces API sur OSX peuvent être fragiles et Apple n'est pas très bon pour la compatibilité descendante, donc vous pouvez refaire vos hacks avec chaque version majeure (et parfois une version mineure et des correctifs), entraînant un coût de maintenance élevé.

Fondamentalement, c'est une énorme somme d'argent et cela fonctionne pour très peu de gain sur une plate-forme dont le propriétaire serait contre vous de le faire de toute façon. Et vous ne voulez pas vraiment dépenser de l'argent pour aider les gens à migrer de votre propre plateforme vers celle d'un concurrent.

Il vous reste donc des choix multiplateformes non parfaits:

  • C ++, qui nécessitera toujours un portage à l'avenir
  • Silverlight hors du navigateur, pour le support de Microsoft
  • Mono, qui fait le travail pour prendre en charge un sous-ensemble sain de .NET, mais n'est pas Microsoft

5
You spend hundreds of millions of dollars and several years porting .NET to the Mac.Excusez-moi? Ce nombre semble un peu élevé ... Je suis presque sûr que le Mono-Framework (avec le support de beaucoup plus d'OS) ne coûte pas si cher.
Bobby

1
@Bobby: c'est ce que je pense. Mono + Silverlight semble la plupart du temps là-bas. Ajoutez à cela un peu de P / Invoke et / ou C ++ / CLI pour des trucs moins courants (Cryptographie, AD, etc.) et je pense que vous auriez une solution assez raisonnable à un coût raisonnable. Mon argument est que Microsoft veut dépenser de l'argent pour aider les gens à utiliser OSX; s'ils ne le font pas, les gens cesseront d'utiliser C # /. NET sous Windows.
2011

@Dan: Exactement, Microsoft ne veut pas être compatible avec le monde, sinon le monde pourrait utiliser quelque chose de différent. ;)
Bobby

15
Le framework Mono n'est pas non plus une solution complète, entièrement testée, documentée et prise en charge. Il y a une différence entre ce qui est «assez bon» pour l'open source et la qualité que les gens attendent de Microsoft. Il leur en coûterait facilement des centaines de millions de dollars pour le faire au niveau demandé par les utilisateurs. Ce qu'ils pourraient faire pour réduire l'investissement serait de choisir un sous-ensemble populaire (et portable) du framework .NET et de le faire. C'est ce qu'ils ont choisi de faire, ils l'appellent "Silverlight".
jpobst

@jpobst mais pourtant il semble que MS a fait exactement cela ... et plus?
2017

14

Non, Silverlight est la seule option Microsoft de .Net sur OS X. Mono ne "traîne" pas autant que vous le pensez; il prend en charge .Net 4.0 et C # 4, par exemple. Cependant, les boîtes à outils de l'interface utilisateur (WinForms et WPF) ne sont pas bien prises en charge sous OS X. Mono ne prend pas du tout en charge WPF. Microsoft ne pourrait pas non plus réécrire l'intégralité du moteur de rendu. C'est probablement OK, cependant. Si vous souhaitez écrire une application Mac native, vous devez écrire une interface utilisateur native (peut-être en utilisant MonoMac).


La direction ne semble pas très encline à accepter l'option Mono. Et il n'a certainement pas pris en charge .NET 4.0 le même jour que sous Windows (ou?).
2011

Silverlight n'est-il pas déjà la majeure partie du chemin sur le front WPF (-like)? Oui, le XAML devrait être différent pour obtenir une apparence Mac.
2011

2
@Dan: La façon dont Mono évolue de nos jours, si vous commencez à développer une application pour la dernière version de .NET lorsque Microsoft la publiera, Mono prendra en charge cette même version au moment où cette application sera prête à être expédiée.
Anon.

@Dan SL et WPF sous les couvertures tentent de fusionner autant que possible. Il existe des différences techniques mais les concepts fondamentaux sont multi-plateformes.
Aaron McIver

6
Si la direction de votre entreprise n'est pas disposée à utiliser Mono, vous ne pourrez pas créer une application de bureau écrite en C # 4.0 traditionnel aussi simple que cela.
Ramhound


4

Silverlight n'est pas uniquement un navigateur . Depuis que la version 3 OOB a existé et serait la voie que je prendrais si une plate-forme prise en charge par Microsoft est un must-have.

Bien que Mono puisse être décalé, il n'est pas aussi supprimé de la pile .NET que vous ne le pensez et ne doit pas être mis de côté comme une option viable.

Quant à savoir pourquoi Microsoft n'implémente pas la totalité de la pile .NET; ROI.


Mais il semble qu'ils soient si proches de Silverlight ... pourquoi ne pas simplement terminer le travail? Cela semble tellement mieux pour tout le monde que Mono reverse engineering le compilateur, CLR, etc.
Ðаn

1
SL n'est pas la totalité de la pile .NET. Le runtime SL par rapport à l'ensemble de la pile .NET sont des animaux complètement différents.
Aaron McIver

Oui, mais comme vous pouvez déjà faire des choses comme OOB comme vous le suggérez avec SL, pourquoi ne pas porter le reste (1/3? 40%?) De la pile .NET? Ou SL n'est-il vraiment rien d'autre qu'une tentative de tuer Flash?
2011

@Dan Lorsque les entreprises poussent des choses vers le cloud ... la dernière chose que vous voulez faire est de porter une pile qui ne peut pas s'exécuter dans le cloud. SL peut fonctionner sur plusieurs navigateurs. Vous pouvez discuter avec Google et d'autres, la pression pour travailler dans un navigateur est réelle. Pourquoi, à ce moment, choisiriez-vous de porter une pile entière sur un système d'exploitation avec une part de marché <10% avec une virtualisation si répandue de nos jours?
Aaron McIver

Microsoft (sans doute) possède le meilleur environnement de développement disponible aujourd'hui avec C # et .NET. Mais des entreprises comme la mienne s'en éloigneront de plus en plus en raison de l'incertitude entourant le Mac / iPad / cloud / etc. C ++ semble beaucoup plus sûr.
2011

3

La plupart des bénéfices de Microsoft proviennent de deux produits - Windows et Office. La compatibilité multiplateforme nuirait à Windows.

Si vous voulez vraiment que le même code soit exécuté sur plusieurs plates-formes, écrivez une application Web. Cela ne vous ressemble cependant pas. «Juste au cas où» n'est pas une bonne raison, c'est un glissement de portée.

Même si vous décidez de cibler Mac OS X ou iOS dans 16 mois, pensez-vous vraiment que vous pourriez prendre votre code C ++ existant et le transformer en une bonne application native (ou même fonctionnelle)? À moins que vous ne travailliez sur un jeu en plein écran, la réponse est non.

Gagnez du temps avec C # maintenant, et si vous décidez de passer au Mac, réécrivez-le à la manière Mac avec Objective-C et Cocoa - vos utilisateurs vous remercieront.


1
"Juste au cas où" est la réalité; personne ne veut dire à la direction "oups" quand il y a une option plus sûre en C ++.
2011

1
En supposant que le code d'interface est correctement séparé, il sera plus facile de déplacer le code C ++ sur le Mac. Réécrivez l'interface dans Objective-C en utilisant Cocoa, créez un lien vers le reste, et vous avez fait beaucoup de travail.
David Thornley

@David: et donc le problème derrière cette question: plus de C ++, (beaucoup) moins de C #. J'aime (vraiment) C #!
2011

Ces préoccupations multiplates-formes ici sont pourquoi beaucoup d'entre nous utilisent toujours Java et ne passent pas en C #.
Brian Knoblauch

1

Existe-t-il une réponse semi-officielle à la raison pour laquelle Microsoft ne prend tout simplement pas en charge .NET sur le Mac lui-même?

Où est le marché qui justifierait que les États-Unis dépensent le trésor pour le coder? Pour ce faire, ils devraient abandonner de sérieuses liquidités - des millions de dollars de salaire. Un processus continu, au fur et à mesure que des correctifs et des mises à jour arrivent.

Et pour quoi? Des droits de vantardise? Tout ce qu'ils en retirent, c'est la possibilité pour les utilisateurs d'abandonner Windows pour Apple et de continuer à exécuter leurs applications.

Si quelqu'un en profitait, ce serait Apple. Facilitez la transition des utilisateurs vers leur plateforme et les développeurs (DEVELOPERS DEVELOPERS) y codent. Mais pensez-vous que SJ donne une merde? Ils préfèrent inventer de nouvelles choses à coller un i Infront de. En outre, la plupart du cadre est OS et les spécifications CLR sont gratuites pour quiconque de les implémenter. Vous ne pouvez pas coller un NDA sale sur tout cela.


Une partie de "ce qui est dans pour Microsoft" consiste à garder les gens à utiliser leurs outils haut de gamme sur Windows. La façon dont les choses évoluent ici, C # /. NET sera reléguée aux applications internes. Les développeurs qui utilisent C # depuis des années réécrivent C ++. Quant au coût; il semblerait qu'il y en ait déjà environ 2/3 avec Silverlight et / ou Mono.
2011

Mono est une plate-forme open source, et bien que la source de .NET ait été publiée, le .NET Framework n'est PAS open source. Microsoft ne pourra pas acheter Mono, pour de nombreuses raisons, la principale étant qu'elles n'ont pas une seule application 100% open source. Savez-vous que Silverlight n'est qu'une seule langue dans le .NET et la raison pour laquelle il est multi-plateforme, car Microsoft aimerait qu'il remplace Flash. Je dois également ajouter qu'Apple a fait des mouvements de main vers ne permettant même pas quelque chose de ce genre sur leur système d'exploitation.
Ramhound

1
@Dan semble que la solution à vos problèmes n'est pas "une seule langue pour les gouverner tous" mais "Comment déployer de manière indépendante de la plateforme". La plupart des gens accomplissent cela en cassant l'interface utilisateur de la logique, en intégrant l'un sur une base par plate-forme et l'autre en tant que service sur les tubes internes.
arnaquer

1
@Dan J'ai une solution pour ça ... Ne codez pas pour le Mac. J'ai un accord personnel non développé pour Apple que j'ai écrit et signé moi-même. Je détesterais totalement ne pas pouvoir coder C #, et donc éviter de le faire. Mais parfois, vous devez faire ce que vous devez faire, et si les souhaits étaient des poissons, nous devions trouver une autre allitération pour décrire les nombreuses choses que nous voulons mais ne pouvons pas avoir.
Arnaqué le

1
@Dan kindasorta. Ils n'ont pas encore vraiment touché le bureau. Mais je suis étonné de la différence de cinq ans.
Déchiré le

0

Vous pourriez trouver le projet MonoMac utile - http://www.mono-project.com/MonoMac

Il permet de développer des applications Cocoa de style Mono, qui peuvent être déployées sur le Mac App Store.

Je considérerais fortement cette approche pour un développeur peu familier avec Objective-C mais avec .NET / Mono / Java qui doit livrer une application dans un scénario limité dans le temps.


0

Aucun.

Je recommande soit d'écrire une application C ++ compilable de manière croisée - si vous en avez le plaisir - soit d'utiliser Ruby avec wxWidgets.

Je considère que .NET est une mauvaise proposition pour le développement multiplateforme et la maintenance à long terme des produits. Bien, mec, vous pouvez rapidement utiliser des applications. : - /

Souhait Delphi était toujours un concurrent majeur.


1
Avez-vous déjà entendu parler de Lazare?
Happy Coder

Aussi, jamais chef de Java?
Fernando Gonzalez Sanchez

0

Si vous souhaitez exécuter .NET en mode natif sur un Mac, vous pouvez utiliser BootCamp pour ce faire (c'est-à-dire que vous exécutez Windows sur le Mac et vos applications .NET dans Windows).

Si vous vouliez dire Mac OS X plutôt que simplement le matériel, vous pouvez utiliser VMWare ou Parallels pour exécuter les applications .NET dans Windows (en émulation) sous OS X. Les deux ont des modes visuels qui permettent à votre application d'apparaître comme si elle s'exécutait uniquement dans OS X (il ressemblera et se comportera comme une application Windows, mais si vous écrivez une application non Web multiplateforme sans interface personnalisée pour chaque système d'exploitation, vous aurez toujours ce problème).

Vous obtiendrez la même quantité de "support" en faisant cela, puisque vous exécutez l'application dans Windows, bien que virtualisée. Bien sûr, toute personne exécutant l'application aura besoin d'une copie du logiciel de virtualisation et de Windows, et sera prête à accepter une application qui ne se comporte pas comme une application OS X - mais c'est le seul moyen d'avoir une "native" .NET fonctionnant sur un Mac.


0

Dan, je ne pense pas que tu puisses faire ça. Cependant, une solution possible (toujours vapourware) consiste à utiliser Embarcadero Rad Studio C ++ Builder, qui a une belle VCL pour développer des applications visuelles (sur lesquelles une grande partie de .net est basée), et ils sont RUMOURS d'avoir un support multiplateforme qui sortira dans la prochaine version.

Cela sera développé sur Windows, ciblé sur Mac ou Linux. C'est du moins ce que dit leur feuille de route.

L'environnement C ++ est raisonnable et si vous développez contre la VCL, en théorie, l'application ne fonctionnera que sur les autres plates-formes.

Bien sûr, jusqu'à ce qu'il soit réellement expédié, il reste à voir à quel point cela est vraiment efficace.


-2

La réponse est non.

En fait, votre cas semble être un très bon exemple du moment de ne pas choisir .NET.


Personne ne peut prédire l'avenir et personne ne veut prendre de risque "indu".
2011

@Dan: Et le fait est? Vous semblez être d'accord avec moi ...?
Gabriel Magana

-3

Si vous souhaitez développer pour un système d'exploitation, utilisez les bons outils. Il n'y a pas d'applications vraiment professionnelles écrites en mono pour le Mac. Il y a d'autre part beaucoup de développeurs non professionnels qui utilisent beaucoup d'outils créant beaucoup de déchets. Regardez les avis sur les applications mono qui ont été écrits pour OSX. Les développeurs écrivent en utilisant un framework incomplet piraté pour correspondre à la plateforme OSX. Commencez à écrire - si vous avez utilisé C #, l'objectif C est un apprentissage rapide.

Les développeurs professionnels pour Mac utilisent C ++, Objective C, Cocoa et Xcode. Je développe sur plusieurs plateformes et chacune a ses propres meilleurs outils. Utilisez Xcode pour Mac et iOS.

Tout comme une note latérale, Xcode n'est pas Visual Studio, il n'est pas aussi stable et est une honte pour Apple en comparaison, mais cela fonctionne bien lorsque vous vous habituez à ses caprices. Il est très difficile de battre les outils Microsofts - mais ils ont été écrits pour Windows et non Linux, iOS, OSX, AIX etc.


1
Avez-vous des faits à sauvegarder des déclarations comme "Xcode n'est pas aussi stable et est une honte pour Apple" parce que, d'après mon expérience personnelle, tous ceux qui ont utilisé Xcode l'ont adoré. De plus, même après avoir exprimé votre opinion personnelle sur un sujet qui ne vous semble pas familier, vous ne savez même pas qu'en 2013, il existe une solution. Bien sûr, la solution est en fait Monoet Xamarin.Macmais c'est une solution. La version actuelle de Mono est une implémentation presque complète à 100% de .NET 4.0, il ne manque que quelques fonctionnalités principales qui ne seront probablement jamais portées (c'est-à-dire WPF).
Ramhound
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.