Quelle est la différence entre .NET Core et Mono?
J'ai trouvé une déclaration sur le site officiel qui disait: "Le code écrit pour lui est également portable sur plusieurs piles d'applications, comme Mono."
Mon objectif est d'utiliser C #, LINQ, EF7 et Visual Studio pour créer un site Web pouvant être exécuté / hébergé sur Linux.
Quelqu'un m'a dit qu'il voulait que ce soit "en Mono", mais je ne sais pas ce que cela signifie. Je sais que je veux utiliser le .NET Core 1.0 avec les technologies que j'ai énumérées ci-dessus. Il a également déclaré qu'il souhaitait utiliser le "CGI rapide". Je ne sais pas non plus ce que cela signifie.
Pouvez-vous m'aider à donner un sens à tous ces termes et si mes attentes sont réalistes?
Math.Pow(2, 3)
- les binaires qui contiennent l'implémentation sont de source fermée et ne sont que pour Windows. Certaines personnes ont décidé qu'elles aimaient suffisamment .NET qu'elles le voulaient pour * nix. Ils ont donc écrit leur propre version des binaires de source fermée. Ensuite, ils ont écrit un compilateur et un interprète. Mono est essentiellement une réimplémentation de tout ce qui était auparavant fermé et écrit pour fonctionner sur windows / linux / osx.Réponses:
Nécromancement.
Fournir une réponse réelle.
.NET Core est désormais officiellement l'avenir de .NET. Cela a commencé en grande partie par une réécriture du cadre ASP.NET MVC et des applications console, qui comprend bien sûr les applications serveur. (Étant donné qu'il est complet de Turing et prend en charge l'interopérabilité avec les DLL C, vous pouvez, si vous le souhaitez, également écrire vos propres applications de bureau avec, par exemple via des bibliothèques tierces comme Avalonia, qui étaient un peu très basiques au moment où j'ai écrit ceci, ce qui signifiait que vous étiez à peu près limité aux trucs Web ou serveur.) Au fil du temps, de nombreuses API ont été ajoutées à .NET Core, à tel point qu'après la version 3.1, .NET Core passera à la version 5.0, sera connu sous le nom de .NET 5.0 sans le "Core", et ce sera alors l'avenir du .NET Framework. Ce qui était le .NET Framework complet restera en mode maintenance sous le nom de .NET Framework 4.8.x complet pendant quelques décennies, jusqu'à ce qu'il meure (il y aura peut-être encore des mises à niveau, mais j'en doute). En d'autres termes, .NET Core est l'avenir de .NET, et le .NET Framework complet suivra le chemin du Dodo / Silverlight / WindowsPhone .
Le point principal de .NET Core, en dehors de la prise en charge multiplateforme, est d'améliorer les performances et d'activer la «compilation native» / le déploiement autonome (vous n'avez donc pas besoin que le framework .NET / VM soit installé sur la machine cible). .
D'une part, cela signifie la prise en charge de docker.io sous Linux, et d'autre part, le déploiement autonome est utile dans le "cloud-computing", car vous pouvez alors simplement utiliser la version du framework dotnet-CORE que vous aimez, et vous n'avez pas à vous soucier des versions du framework .NET que l'administrateur système a réellement installées.
Alors que le runtime .NET Core prend en charge plusieurs systèmes d'exploitation et processeurs, le SDK est une autre histoire. Et bien que le SDK prenne en charge plusieurs systèmes d'exploitation, la prise en charge ARM du SDK est / était toujours en cours. .NET Core est pris en charge par Microsoft. Dotnet-Core n'est pas venu avec WinForms ou WPF ou quelque chose comme ça.
"The Mono Project" est beaucoup plus ancien que .NET Core.
Mono est espagnol et signifie singe, et comme remarque secondaire, le nom n'a rien à voir avec la mononucléose (indice: vous pouvez obtenir une liste du personnel sous http://primates.ximian.com /).
Mono a été lancé en 2005 par Miguel de Icaza (le gars qui a lancé GNOME - et quelques autres) en tant qu'implémentation du .NET Framework pour Linux (Ximian / SuSe / Novell). Mono comprend des formulaires Web, Winforms, MVC, Olive et un IDE appelé MonoDevelop(également appelé Xamarin Studio ou Visual Studio Mac). Fondamentalement, l'équivalent de (OpenJDK) JVM et (OpenJDK) JDK / JRE (par opposition à SUN / Oracle JDK). Vous pouvez l'utiliser pour que les applications ASP.NET-WebForms + WinForms + ASP.NET-MVC fonctionnent sous Linux.
Mono est pris en charge par Xamarin (le nouveau nom de la société de ce qui était Ximian, lorsqu'ils se concentraient sur le marché mobile, au lieu du marché Linux), et non par Microsoft.
(puisque Xamarin a été acheté par Microsoft, c'est techniquement [mais pas culturellement] Microsoft.)
Vous obtiendrez généralement vos trucs C # à compiler en mono, mais pas les trucs VB.NET.
Mono manque certaines fonctionnalités avancées, comme WSE / WCF et WebParts.
De nombreuses implémentations Mono sont incomplètes (par exemple, lançent NotImplementedException dans le cryptage ECDSA), boguées (par exemple ODBC / ADO.NET avec Firebird), se comportent différemment que sur .NET (par exemple la sérialisation XML) ou autrement instables (ASP.NET MVC) et d'une lenteur inacceptable (Regex). À la hausse, la chaîne d'outils Mono fonctionne également sur ARM.
En ce qui concerne .NET Core, quand ils disent multiplateforme, ne vous attendez pas à ce que multiplateforme signifie que vous pourriez en fait simplement installer apt. Get Core sur ARM-Linux, comme vous pouvez le faire avec ElasticSearch. Vous devrez compiler l'intégralité du framework à partir des sources.
Autrement dit, si vous avez cet espace (par exemple sur un Chromebook, qui a une HD totale de 16 à 32 Go).
Il avait également des problèmes d'incompatibilité avec OpenSSL 1.1 et libcurl.
Celles-ci ont été corrigées dans la dernière version de .NET Core version 2.2.
Voilà pour multiplateforme.
Tant que ce code ne repose pas sur les appels WinAPI, Windows-dll-pinvokes, COM-Components, un système de fichiers insensible à la casse, le codage par défaut du système (page de codes) et n'a pas de problèmes de séparateur de répertoires, c'est correct. Cependant, le code .NET Core s'exécute sur .NET Core et non sur Mono. Il sera donc difficile de mélanger les deux. Et comme Mono est assez instable et lent (pour les applications Web), je ne le recommanderais pas de toute façon. Essayez le traitement d'image sur .NET core, par exemple WebP ou le déplacement de GIF ou multipage-tiff ou l'écriture de texte sur une image, vous serez méchamment surpris.
Le code non écrit pour .NET (non-Core) n'est pas portable pour .NET Core.
Autrement dit, si vous voulez qu'une bibliothèque non GPL C # comme PDFSharp crée des documents PDF (très courant), vous n'avez pas de chance
(en ce moment)( plus maintenant ). Peu importe le contrôle ReportViewer, qui utilise Windows-pInvokes (pour crypter, créer des documents mcdf via COM, et pour obtenir des informations sur la police, les caractères, le crénage, l'incorporation de polices, mesurer les chaînes et faire des sauts de ligne, et pour dessiner des tiffs de qualité acceptable) , et ne fonctionne même pas sur Mono sous Linux( j'y travaille ).
En outre, le code écrit en .NET Core n'est pas portable pour Mono, car Mono n'a pas les bibliothèques d'exécution .NET Core (jusqu'à présent).
EF dans n'importe quelle version que j'ai essayée jusqu'à présent était si sacrément lent (même sur des choses aussi simples comme une table avec une jointure gauche), je ne le recommanderais jamais - pas sur Windows non plus.
Je ne recommanderais pas particulièrement EF si vous avez une base de données avec des contraintes uniques ou des colonnes varbinary / filestream / hierarchyid. (Pas pour la mise à jour du schéma non plus.)
Et pas non plus dans une situation où les performances de base de données sont critiques (disons 10+ à 100+ utilisateurs simultanés).
En outre, exécuter un site Web / une application Web sous Linux signifie tôt ou tard que vous devrez le déboguer.
Il n'y a pas de prise en charge du débogage pour .NET Core sous Linux.(Plus maintenant, mais nécessite JetBrains Rider.)MonoDevelop ne prend pas (encore) en charge le débogage des projets .NET Core.
Si vous avez des problèmes, vous êtes seul. Vous devrez utiliser une journalisation étendue.
Soyez prudent, sachez qu'une journalisation étendue remplira votre disque en un rien de temps, en particulier si votre programme entre dans une boucle infinie ou récursive. (Normalement, environ 5% de l'espace disque est réservé à l'utilisateur root [aka administrateur sur Windows], donc au moins l'administrateur peut toujours se connecter si le disque est presque plein. Mais si vos applications s'exécutent en tant que root, cette restriction ne s'applique pas pour leur utilisation du disque, et ainsi leurs fichiers journaux peuvent utiliser 100% de l'espace libre restant, donc même l'administrateur ne peut plus se connecter.)
Cela est particulièrement dangereux si votre application Web s'exécute en tant que root, car la connexion nécessite un espace de fichier journal - s'il n'y a plus d'espace libre, vous ne pourrez plus vous connecter.
Il est donc préférable de ne pas crypter ce disque, c'est-à-dire si vous appréciez vos données / système.
Cela signifie qu'il ne veut pas utiliser .NET Core, ou qu'il veut simplement utiliser C # sur Linux / Mac. Je suppose qu'il veut juste utiliser C # pour une Web-App sur Linux. .NET Core est la voie à suivre pour cela, si vous voulez absolument le faire en C #. N'allez pas avec "Mono proprement dit"; en apparence, cela semble fonctionner au début - mais croyez-moi, vous le regretterez car ASP.NET MVC de Mono n'est pas stable lorsque votre serveur fonctionne à long terme (plus d'un jour) - vous avez maintenant été averti. Voir également les références «n'a pas terminé» lors de la mesure des performances Mono sur les benchmarks techempower.
Cela signifie qu'il veut utiliser un serveur Web complet et performant comme nginx (Engine-X), peut-être Apache.
Ensuite, il peut exécuter mono / dotnetCore avec un hébergement basé sur un nom virtuel (plusieurs noms de domaine sur la même IP) et / ou un équilibrage de charge. Il peut également exécuter d'autres sites Web avec d'autres technologies, sans avoir besoin d'un numéro de port différent sur le serveur Web. Cela signifie que votre site Web s'exécute sur un serveur fastcgi, et nginx transmet toutes les demandes Web pour un certain domaine via le protocole fastcgi à ce serveur. Cela signifie également que votre site Web s'exécute dans un pipeline fastcgi, et vous devez faire attention à ce que vous faites, par exemple, vous ne pouvez pas utiliser HTTP 1.1 lors de la transmission de fichiers.
Sinon, les fichiers seront tronqués à la destination.
Voir aussi ici et ici .
Pour conclure:
.NET Core à l'heure actuelle (2016-09-28) n'est pas vraiment portable, ni vraiment multiplateforme (en particulier les outils de débogage).
La compilation native n'est pas non plus facile, en particulier pour ARM.
Et pour moi, il ne semble pas non plus que son développement soit "vraiment terminé".
Par exemple, System.Data.DataTable / DataAdaper.Update est manquant ...(plus avec .NET Core 2.0)Avec les interfaces System.Data.Common.IDB *.(plus avec .NET Core 1.1)s'il y a jamais eu une classe qui est souvent utilisée, DataTable / DataAdapter le serait ...
De plus, l'installateur Linux (.deb) échoue, au moins sur ma machine, et je ' Je suis sûr que je ne suis pas le seul à avoir ce problème.
Déboguer, peut-être avec Visual Studio Code, si vous pouvez le construire sur ARM (j'ai réussi à le faire - ne suivez PAS le blog de Scott Hanselman si vous le faites - il y a un howto dans le wiki de VS-Code sur github), parce que ils n'offrent pas l'exécutable.
Yeoman échoue également. (Je suppose que cela a quelque chose à voir avec la version de nodejs que vous avez installée - VS Code nécessite une version, Yeoman une autre ... mais il devrait fonctionner sur le même ordinateur. Assez boiteux
Peu importe qu'il devrait fonctionner sur la version de nœud livrée par défaut sur l'OS.
Peu importe qu'il ne devrait pas y avoir de dépendance à NodeJS en premier lieu.
Le serveur kestell est également en cours de réalisation.
Et à en juger par mon expérience avec le mono-projet, je doute fortement qu'ils aient jamais testé .NET Core sur FastCGI, ou qu'ils aient une idée de ce que le support FastCGI signifie pour leur framework, et encore moins qu'ils l'ont testé pour s'assurer que "tout fonctionne ". En fait, j'ai juste essayé de créer une application fastcgi avec .NET Core et je viens de réaliser qu'il n'y a pas de bibliothèque FastCGI pour .NET Core "RTM" ...
Donc, lorsque vous allez exécuter .NET Core "RTM" derrière nginx, vous ne pouvez le faire qu'en envoyant des requêtes par proxy à Kestrell (ce serveur Web semi-fini dérivé de nodeJS) - il n'y a pas de support fastcgi actuellement dans .NET Core "RTM", AFAIK. Comme il n'y a pas de bibliothèque fastcgi de base .net et aucun échantillon, il est également très peu probable que quelqu'un ait fait des tests sur le framework pour s'assurer que fastcgi fonctionne comme prévu.
Je remets également en question la performance.
Dans le benchmark (préliminaire) techempower (round 13) , aspnetcore-linux se classe à 25% par rapport aux meilleures performances, tandis que des cadres comparables comme Go (golang) se classent à 96,9% des performances de pointe (et c'est lors du retour de texte en clair sans fichier - accès système uniquement). .NET Core fait un peu mieux sur la sérialisation JSON, mais il ne semble pas non plus convaincant (aller atteint 98,5% du pic, .NET core 65%). Cela dit, cela ne peut pas être pire que "mono proprement dit".
De plus, comme il est encore relativement nouveau, toutes les bibliothèques principales n'ont pas (encore) été portées, et je doute que certaines d'entre elles le seront jamais.
Le support d'imagerie est également au mieux discutable.
Pour tout chiffrement, utilisez plutôt BouncyCastle.
J'espère que je vous ai aidé à donner plus de sens à tous ces termes.
En ce qui concerne vos attentes:
développer une application Linux sans rien savoir de Linux est une idée vraiment stupide en premier lieu, et elle est également vouée à l'échec d'une manière ou d'une autre horrible. Cela dit, parce que Linux ne coûte pas de licence, c'est une bonne idée en principe, MAIS SEULEMENT SI VOUS SAVEZ CE QUE VOUS FAITES.
Développer une application pour une plate-forme sur laquelle vous ne pouvez pas déboguer votre application est une autre très mauvaise idée.
Développer pour fastcgi sans savoir quelles conséquences il y a est encore une très mauvaise idée.
Faire toutes ces choses sur une plate-forme "expérimentale" sans aucune connaissance des spécificités de cette plate-forme et sans support de débogage est un suicide, si votre projet est plus qu'une simple page d'accueil personnelle. D'un autre côté, je suppose que le faire avec votre page d'accueil personnelle à des fins d'apprentissage serait probablement une très bonne expérience - vous apprendrez alors quel est le cadre et quels sont les problèmes non liés au cadre.
Vous pouvez par exemple (par programmation) monter en boucle un fat32, hfs ou JFS insensible à la casse pour votre application, pour contourner les problèmes de respect de la casse (montage en boucle non recommandé en production).
Pour résumer
À l'heure actuelle (2016-09-28), je resterais loin de .NET Core (pour une utilisation en production). Peut-être que dans un à deux ans, vous pourrez revoir, mais probablement pas avant.
Si vous avez un nouveau projet Web que vous développez, démarrez-le dans .NET Core, pas mono.
Si vous voulez un framework qui fonctionne sous Linux (x86 / AMD64 / ARMhf) et Windows et Mac, qui n'a pas de dépendances, c'est-à-dire uniquement une liaison statique et aucune dépendance sur .NET, Java ou Windows, utilisez plutôt Golang. Il est plus mature et ses performances sont prouvées (Baidu l'utilise avec 1 million d'utilisateurs simultanés) et golang a une empreinte mémoire considérablement plus faible. Aussi golang est dans les référentiels, le .deb s'installe sans problèmes, le code source se compile - sans nécessiter de modifications - et golang (en attendant) a un support de débogage avec delve et JetBrainsGogland sur Linux (et Windows et Mac). Le processus de construction (et l'exécution) de Golang ne dépend pas non plus de NodeJS, qui est encore un autre avantage.
En ce qui concerne le mono, éloignez-vous.
Le chemin parcouru par le mono est incroyable, mais malheureusement, cela ne remplace pas ses problèmes de performances / évolutivité et de stabilité pour les applications de production.
De plus, le mono-développement est assez mort, ils ne développent en grande partie que les parties pertinentes pour Android et iOS, car c'est là que Xamarin gagne de l'argent.
Ne vous attendez pas à ce que le développement Web soit un citoyen Xamarin / mono de première classe.
.NET Core peut valoir la peine, si vous démarrez un nouveau projet, mais pour les grands projets de formulaires Web existants, le portage est largement hors de question, les changements requis sont énormes. Si vous avez un projet MVC, la quantité de changements pourrait être gérable, si la conception de votre application d'origine était saine, ce qui n'est généralement pas le cas pour la plupart des applications dites «historiquement développées» existantes.
Mise à jour de décembre 2016: la
compilation native a été supprimée de l'aperçu .NET Core, car elle n'est pas encore prête ... Il
semble qu'ils se soient améliorés assez fortement par rapport au benchmark des fichiers texte bruts, mais d'un autre côté, c'est devenu assez bogué. En outre, il s'est encore détérioré dans les indices de référence JSON. Curieux également que le cadre d'entité soit plus rapide pour les mises à jour que Dapper - bien que les deux connaissent une lenteur record. Il est très peu probable que cela soit vrai. Il semble qu'il y ait encore plus que quelques bugs à chasser.
En outre, il semble y avoir un soulagement sur le front de l'IDE Linux.
JetBrains a publié "Project Rider", un aperçu en accès anticipé d'un IDE C # /. NET Core pour Linux (et Mac et Windows), qui peut gérer les fichiers de projet Visual Studio. Enfin un IDE C # qui est utilisable et qui n'est pas si lent que ça.
Conclusion: .NET Core est toujours un logiciel de qualité pré-version en mars 2017. Portez vos bibliothèques, mais éloignez-vous-en pour la production, jusqu'à ce que la qualité du framework se stabilise.
Et gardez un œil sur Project Rider.
Mise à jour 2017
J'ai migré la page d'accueil de mon (frère) vers .NET Core pour l'instant.
Jusqu'à présent, le temps d'exécution sur Linux semble être assez stable (au moins pour les petits projets) - il a facilement survécu à un test de charge - le mono n'a jamais réussi.
En outre, il semble que j'ai mélangé le déploiement natif .NET-Core et .NET-Core-self-CONTENU. Le déploiement autonome fonctionne, mais il est un peu sous-documenté, bien qu'il soit super facile (les outils de génération / publication sont un peu instables, pourtant - si vous rencontrez "Nombre positif requis. - Échec de la construction." - exécutez à nouveau la même commande, et il fonctionne).
Tu peux courir
Et vous obtenez un fichier .exe autonome (dans le répertoire de publication), que vous pouvez déplacer vers une machine Windows 8.1 sans framework .NET installé et le laisser s'exécuter. Agréable. C'est ici que dotNET-Core commence à devenir intéressant. (attention aux lacunes, SkiaSharp ne fonctionne pas sur Windows 8.1 / Windows Server 2012 R2, [encore] - l'écosystème doit d'abord rattraper son retard - mais il est intéressant de noter que Skia-dll-load-fail ne plante pas le serveur entier / application - donc tout le reste fonctionne)
(Remarque: SkiaSharp sur Windows 8.1 ne contient pas les fichiers d'exécution VC appropriés - msvcp140.dll et vcruntime140.dll. Copiez-les dans le répertoire de publication et Skia fonctionnera sur Windows 8.1.)
Mise à jour d'août 2017
.NET Core 2.0 publié.
Soyez prudent - vient avec (énorme rupture) des changements d'authentification ...
À la hausse, cela a ramené les classes DataTable / DataAdaper / DataSet, et bien d'autres.
Réalisé .NET Core ne prend toujours pas en charge Apache SparkSQL, car Mobius n'est pas encore porté. C'est mauvais, car cela signifie qu'il n'y a pas de prise en charge SparkSQL pour mon cluster IoT Cassandra, donc pas de jointures ...
Prise en charge expérimentale ARM (runtime uniquement, pas SDK - trop mauvais pour le développement sur mon Chromebook - avec impatience 2.1 ou 3.0).
PdfSharp est désormais porté expérimentalement vers .NET Core.
JetBrains Riderquitté EAP. Vous pouvez maintenant l'utiliser pour développer et déboguer .NET Core sous Linux - bien que jusqu'à présent, seulement .NET Core 1.1 jusqu'à ce que la mise à jour pour la prise en charge de .NET Core 2.0 soit en ligne.
Mise à jour de mai 2018
.NET Core 2.1 version imminente. Peut-être que cela corrigera l'authentification NTLM sur Linux (l'authentification NTLM ne fonctionne pas sur Linux {et éventuellement Mac} dans .NET-Core 2.0 avec plusieurs en-têtes d'authentification, tels que négociation, généralement envoyés avec ms-exchange, et ils sont apparemment ne le fixant que dans la v2.1, pas de version de correction de bugs pour 2.0).
Mais je n'installe pas de versions d'aperçu sur ma machine. Alors j'attends.
La v2.1 réduirait également considérablement les temps de compilation. Ce serait bien.
Notez également que sous Linux, .NET Core est uniquement en 64 bits !
Il n'y a pas et il n'y aura pas de version x86-32 de .NET Core sous Linux .
Et le port ARM est ARM-32 uniquement. Pas encore d'ARM-64.
Et sur ARM, vous n'avez (actuellement) que le runtime, pas le dotnet-SDK.
Et encore une chose:
parce que .NET-Core utilise OpenSSL 1.0, .NET Core sous Linux ne fonctionne pas sur Arch Linux, et par dérivation pas sur Manjaro (la distribution Linux la plus populaire de loin à ce stade), parce que Arch Linux utilise OpenSSL 1.1. Donc, si vous utilisez Arch Linux, vous n'avez pas de chance (avec Gentoo aussi).
Éditer:
A la hausse, les performances se sont nettement améliorées:
.NET Core 3:
.NET-Core v 3.0 est censé apporter WinForms et WPF à .NET-Core.
Cependant, alors que WinForms et WPF seront .NET Core, WinForms et WPF dans .NET-Core ne fonctionneront que sur Windows, car WinForms / WPF utilisera l'API Windows.
Remarque:
.NET Core 3.0 est désormais disponible (RTM) et il existe une prise en charge de WinForms et WPF, mais uniquement pour C # (sous Windows). Il n'y a pas de WinForms-Core-Designer . Le concepteur proposera éventuellement une mise à jour de Visual Studio. La prise en charge de WinForms pour VB.NET n'est pas prise en charge , mais est prévue pour .NET 5.0 en 2020 .
PS:
Si vous l'avez utilisé sur Windows, vous n'avez probablement jamais vu cela:
Je pensais mentionner que je pense que le monodéveloppement (alias Xamarin Studio, Mono IDE ou Visual Studio Mac comme on l'appelle maintenant sur Mac) a évolué assez bien et est - en attendant - largement utilisable.
Cependant, JetBrains Rider (EAP 2018 à ce stade) est certainement beaucoup plus agréable et plus fiable (et le décompilateur inclus est plus sûr), c'est-à-dire si vous développez .NET-Core sur Linux ou Mac. MonoDevelop ne prend pas en charge Debug-StepThrough sous Linux dans .NET Core, car MS ne concède pas de licence à sa DLL d'API de débogage (sauf pour VisualStudio Mac ...). Cependant, vous pouvez utiliser le débogueur Samsung pour .NET Core via l' extension de débogage .NET Core pour Samsung Debugger pour MonoDevelop
Avertissement:
je n'utilise pas Mac, donc je ne peux pas dire si ce que j'ai écrit ici s'applique également aux Mac basés sur FreeBSD-Unix. Je fais référence à la version Linux (Debian / Ubuntu / Mint) de JetBrains Rider, mono, MonoDevelop / VisualStudioMac / XamarinStudio et .NET-Core. En outre, Apple envisage de passer des processeurs Intel à des processeurs ARM (ARM-64?) Auto-fabriqués, une grande partie de ce qui s'applique à Mac en ce moment pourrait ne pas s'appliquer à Mac à l'avenir (2020+).
De plus, lorsque j'écris "mono est assez instable et lent", l'instable concerne les applications WinFroms et WebForms, en particulier l'exécution d'applications Web via fastcgi ou avec XSP (sur la version 4.x de mono), ainsi que la sérialisation XML -gestion des particularités, et le relativement lent concerne WinForms, et les expressions régulières en particulier (ASP.NET-MVC utilise également des expressions régulières pour le routage).
Lorsque j'écris sur mon expérience des modes mono 2.x, 3.x et 4.x, cela ne signifie pas nécessairement que ces problèmes n'ont pas été résolus à l'heure actuelle, ni au moment où vous lisez ceci, ni que s'ils le sont corrigé maintenant, qu'il ne peut pas y avoir de régression plus tard qui réintroduit aucun de ces bogues / fonctionnalités. Cela ne signifie pas non plus que si vous intégrez le mono-runtime, vous obtiendrez les mêmes résultats que lorsque vous utiliserez le mono-runtime du système (dev). Cela ne signifie pas non plus que l'incorporation du mono-runtime (n'importe où) est nécessairement gratuite.
Tout cela ne signifie pas nécessairement que le mono est mal adapté à iOS ou Android, ou qu'il a les mêmes problèmes là-bas. Je n'utilise pas mono sur Android ou IOS, donc je ne suis pas en mesure de dire quoi que ce soit sur la stabilité, la convivialité, les coûts et les performances sur ces plates-formes. De toute évidence, si vous utilisez .NET sur Android, vous devez également prendre en compte d'autres coûts, tels que la pondération des coûts xamarin par rapport aux coûts et au temps de portage du code existant vers Java. On entend du mono sur Android et IOS doit être assez bon. Prenez-le avec un grain de sel. D'une part, ne vous attendez pas à ce que l'encodage du système par défaut soit le même sur Android / iOS par rapport à Windows, et ne vous attendez pas à ce que le système de fichiers Android soit insensible à la casse, et ne vous attendez pas à ce que des polices Windows soient présentes .
la source
Dans le monde .NET, il existe deux types de CLR, les CLR "complets" et les CLR de base, et ce sont des choses très différentes.
Il existe deux implémentations CLR "complètes", le CLR .NET natif de Microsoft (pour Windows) et le CLR Mono (qui a lui-même des implémentations pour Windows, linux et unix (Mac OS X et FreeBSD)). Un CLR complet est exactement cela - tout, à peu près, ce dont vous avez besoin. En tant que tels, les CLR "complets" ont tendance à être de grande taille.
Les CLR de base sont par contre réduits et beaucoup plus petits. Parce qu'ils ne sont qu'une implémentation de base, il est peu probable qu'ils contiennent tout ce dont vous avez besoin.Ainsi, avec les Core CLR, vous ajoutez des ensembles de fonctionnalités au CLR que votre produit logiciel utilise, à l'aide de NuGet. Il existe des implémentations Core CLR pour Windows, linux (divers) et unix (Mac OS X et FreeBSD) dans le mélange. Microsoft a ou refactorise également les bibliothèques de framework .NET pour Core CLR, afin de les rendre plus portables pour le contexte de base. Étant donné la présence de mono sur les systèmes d'exploitation * nix, il serait surprenant que les Core CLR pour * nix n'incluent pas de base de code mono, mais seule la communauté Mono et Microsoft pourraient nous le dire avec certitude.
De plus, je suis d'accord avec Nico sur le fait que les Core CLR sont nouveaux - c'est au RC2 en ce moment je pense. Je ne dépendrais pas encore de lui pour le code de production.
Pour répondre à votre question, vous pouvez diffuser votre site sur Linux en utilisant Core CLR ou Mono, et ce sont deux façons différentes de le faire. Si vous voulez une valeur sûre en ce moment, j'irais avec mono sur linux, puis le porter si vous le souhaitez plus tard, vers Core.
la source
Vous avez choisi non seulement une voie réaliste, mais sans doute l'un des meilleurs écosystèmes fortement soutenus (également des plates-formes X) par MS. Vous devriez toujours considérer les points suivants:
J'espère que ça aide
la source
jexus
qui peut héberger le site Web ASP.NET sur Linux. Mon site personnel est écrit avec NancyFx (à l'origine ASP.NET MVC4) fonctionne dessus..Net Core ne nécessite pas de mono au sens du framework mono. .Net Core est un framework qui fonctionnera sur plusieurs plateformes dont Linux. Référence https://dotnet.github.io/ .
Cependant, le noyau .Net peut utiliser le framework mono. Référence https://docs.asp.net/en/1.0.0-rc1/getting-started/choosing-the-right-dotnet.html (note rc1 documentatiopn no rc2 available), cependant mono n'est pas un framework pris en charge par Microsoft et recommanderait d'utiliser un cadre pris en charge
Le framework d'entité 7 est désormais appelé
Entity Framework Core
et est disponible sur plusieurs plates-formes, y compris Linux. Référence https://github.com/aspnet/EntityFramework (revoir la feuille de route)J'utilise actuellement ces deux cadres, mais vous devez comprendre qu'il est toujours au stade de la version candidate (
RC2
c'est la version actuelle) et que les versions bêta et les versions candidates ont subi des changements massifs qui finissent généralement par vous gratter la tête.Voici un tutoriel sur la façon d'installer MVC .Net Core sous Linux. https://docs.asp.net/en/1.0.0-rc1/getting-started/installing-on-linux.html
Enfin, vous avez le choix entre des serveurs Web (dont je suppose que la
fast cgi
référence vient) pour héberger votre application sur Linux. Voici un point de référence pour l'installation dans un environnement Linux. https://docs.asp.net/en/1.0.0-rc1/publishing/linuxproduction.htmlJe me rends compte que ce message finit par être principalement des liens vers la documentation, mais à ce stade, ce sont vos meilleures sources d'information. Le noyau .Net est encore relativement nouveau dans la communauté .Net et jusqu'à sa sortie complète, j'hésiterais à l'utiliser dans un environnement de produit étant donné les changements de rupture entre les versions publiées.
la source
Cette question est particulièrement réelle car hier, Microsoft a officiellement annoncé la sortie de .NET Core 1.0 . En supposant que Mono implémente la plupart des bibliothèques .NET standard, la différence entre Mono et .NET core peut être vue à travers la différence entre .NET Framework et .NET Core:
Si vous devez lancer quelque chose rapidement, optez pour Mono car il s'agit actuellement (juin 2016) d'un produit plus mature, mais si vous construisez un site Web à long terme, je suggérerais .NET Core. Il est officiellement pris en charge par Microsoft et la différence dans les API prises en charge disparaîtra probablement bientôt, compte tenu de l'effort que Microsoft consacre au développement de .NET Core.
Linq et le framework Entity sont inclus dans .NET Core , vous pouvez donc prendre une photo en toute sécurité.
la source
Pour être simple,
.Net Core est l'avenir. et Mono sera finalement mort. Cela dit, .Net Core n'est pas suffisamment mûr. J'avais du mal à l'implémenter avec IBM Bluemix et j'ai ensuite abandonné l'idée. Au bout du temps (peut-être 1-2 ans), ça devrait être mieux.
la source
En un mot:
Mono = compilateur pour C #
Développement mono = compilateur + IDE
.Net Core = compilateur ASP
Le cas actuel pour .Net Core est le Web uniquement dès qu'il adopte une norme de forme de Win ouverte et une adoption de langage plus large, il pourrait enfin être le moteur de développement de Microsoft Killer. Compte tenu du récent transfert de licence Java d'Oracle, Microsoft a beaucoup de temps pour briller.
la source