Noyau. net vs Mono

Quelle est la différence entre .net Core et Mono?

j'ai trouvé une déclaration sur le site officiel qui dit:" Code écrit pour elle est également portable à travers les piles d'application, tels que Mono."

mon but est d'utiliser C#, LINQ, EF7 et Visual Studio pour créer un site web qui peut être dirigé/hébergé sur Linux.

Quelqu'un m'a dit qu'il voulait être "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 dit qu'il voulait utiliser "Fast CGI". Je ne sais pas ce que cela signifie soit.

pouvez-vous m'aider à donner un sens à tous ces Termes et si mes attentes sont réalistes?

162
demandé sur Palec 2016-06-10 03:13:07

6 réponses

Nécromancie.

Fournir une réponse réelle.

Quelle est la différence entre .net Core et Mono?

.NET Core est pour la plupart une réécriture du ASP.NET MVC framework (and console applications) afin de réduire les dépendances, le rendre plus modulaire, et d'augmenter les performances.

<edit>Console Applications: this includes server applications IMHO</edit>

le point principal est d'activer"native compilation" /self-contained-deployment (vous n'avez donc pas besoin de .net framework/VM installé sur la machine cible.

Ceci est utile dans le "cloud-computing", depuis lors Vous pouvez utiliser n'importe quelle version du framework dotnet-CORE que vous aimez, et vous n'avez pas à vous soucier de quelle(S) version (s) du framework .net le sysadmin a réellement installé.

.net Core également prend en charge plusieurs systèmes d'exploitation comme un sideshow.

Il est supporté par Microsoft.

Dotnet Core ne vient pas avec Winforms ou WPF ou quelque chose comme ça.

Mono est une implémentation du .net Framework pour Linux (y compris les formulaires Web, Winforms, MVC). Essentiellement l'équivalent de (OpenJDK) JVM et (OpenJDK) JDK/JRE (par opposition à SUN/Oracle JDK). Tu peux l'utiliser pour avoir L'ASP.NET-WebForms + WinForms + ASP.NET-MVC applications pour travailler sur Linux.

Il est supporté par Xamarin, et non par Microsoft.

(puisque Xamarin a été acheté par Microsoft, c'est techniquement, mais pas vraiment, Microsoft.)

Vous obtiendrez généralement votre c # stuff à compiler sur mono, mais pas le VB.NET des trucs.

Certaines fonctionnalités avancées, comme WSE/WCF et WebParts sont manquantes.

Bon nombre des implémentations sont incomplets (par exemple, jettent NotImplementedException dans le cryptage ECDSA), buggy (par exemple ODBC/ADO.NET avec Firebird), se comportent différemment de on .NET (par exemple XML-serialization) ou autrement unstable (ASP.NET MVC) et d'une lenteur inacceptable (Regex).

cependant, ne vous attendez pas à ce que cross-plate-forme signifie que vous pourriez en fait juste apt-get install.net Core sur ARM-Linux, comme vous le pouvez avec elasticsearch. Vous devrez compiler l'ensemble du framwork à partir de source.

C'est-à-dire si vous avez cet espace (par exemple sur un Chromebook, qui a un total HD de 16 à 32 Go).

Donc, beaucoup de croix-plateforme.

j'ai trouvé une déclaration sur le site officiel qui dit, " Code écrit pour il est également portable à travers empilements d'application, tels que Mono".

aussi longtemps que ce code ne dépend pas de WinAPI-calls, Windows-dll-pinvokes, COM-Components, a système de fichiers insensible à la casse et n'a pas de problèmes de séparateur de répertoires, c'est exact. Cependant, .NET Core code 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, Je ne le recommande pas de toute façon. Essayez le traitement d'image sur .net core, par exemple WebP ou GIF mobile ou multipage-tiff ou l'écriture de texte sur une image, vous serez nastily surpris.

<edit> à la mi-février 2017: vous pouvez utiliser SkiaSharp pour celui maintenant (exemple) </edit>

Note:

À partir de .NET Core 2.0, Il y a système.Dessin.Commune (nuget), qui contient la plupart des fonctionnalités du Système.Dessin. Il devrait être plus ou moins Fonction-complète dans .NET-Core 2.1. Cependant, Système.Dessin.Utilisations communes GDI+, et ne fonctionnera donc pas sur Azure (Système.Les bibliothèques de dessin sont disponibles dans le Service Cloud Azure [fondamentalement juste un VM], mais pas dans Azure Web App [fondamentalement partagé l'hébergement?])

Jusqu'à présent, le Système.Dessin.Travaux communs très bien sur Linux / Mac.

Le Code

non écrit pour .NET (non-core) n'est pas portable pour .NET core.

Ce qui signifie que si vous voulez une bibliothèque Non-GPL C comme PDFSharp pour créer des documents PDF (très courant), vous n'avez pas de chance (pour le moment) ( pas plus ). Peu importe ReportViewer control, qui utilise Windows-pInvokes (pour n'importe quelle raison), et ne fonctionne même pas sur mono sur Linux

( je travaille sur ce ).

aussi, le code écrit dans .NET core n'est pas portable En mono, parce que mono n'a pas les bibliothèques d'exécution .net core (encore).

mon but est d'utiliser C#, LINQ, EF7, visual studio pour créer un site web qui peut être exécuté/hébergé en Linux.

EF dans toutes les versions que j'ai essayées jusqu'à présent était tellement lent (même sur des choses aussi simples comme une table avec un gaucher-join), Je ne le recommanderais jamais - pas sur Windows non plus.

Je ne recommande pas particulièrement EF si vous avez une base de données avec des colonnes unique-constricins, ou varbinary/filestream/hierarchyid. (pas pour le schéma-mise à jour non plus)

Et aussi pas dans une situation où DB-performance est critique (disons 10+ à 100+ utilisateurs concurrents).

En outre, l'exécution d'un site Web/Web-application sur Linux signifiera tôt ou tard que vous devrez le déboguer.

il n'y a pas de prise en charge de débogage pour .net Core sous Linux. (non plus, mais nécessite JetBrains Rider)

MonoDevelop ne prend pas (encore) en charge les projets de débogage .NET-Core.

Si tu as des problèmes, tu es tout seul. Vous aurez à l'utilisation étendue de l'exploitation forestière.

Soyez prudent, sachez que la journalisation extensive remplira votre disque en peu de temps, surtout si votre programme entre dans une boucle infine ou une récursion.

C'est particulièrement dangereux si votre application web tourne en tant que root, parce que l'ouverture de session nécessite logfile-space-s'il n'y a plus d'espace libre, Vous ne pourrez plus vous connecter.

(Normalement, environ 5% de l'espace disque est réservé à l'utilisateur root [alias administrateur sous windows], ainsi, au moins l'administrateur peut encore se connecter si le disque est presque plein. Mais si vos applications tournent en tant que root, cette restriction ne s'applique pas à leur utilisation de disque, et donc leurs logfiles peuvent utiliser 100% de l'espace libre restant, donc même l'administrateur ne peut plus se connecter.)

Il est donc préférable de ne pas crypter ce disque, c'est-à-dire si vous valorisez vos données/système.

Quelqu'un m'a dit qu'il voulait être "Mono", mais je ne sais pas ce que cela signifie.

cela signifie soit qu'il ne veut pas utiliser .NET Core, soit qu'il veut juste utiliser C# sur Linux/Mac. À mon avis, Il veut juste utiliser C# pour une application Web sur Linux. .NET Core est la solution pour cela, si vous voulez absolument le faire en C#. Ne pas aller avec "Mono propre"; à la surface, il semblerait que cela fonctionne d'abord - mais croyez-moi, vous le regretteriez parce que le mono est ASP.NET MVC n'est pas stable lorsque votre serveur tourne à long terme (plus de 1 jour) - vous avez été averti. Voir aussi les références" n'a pas complété " lors de la mesure de la performance mono sur les benchmarks techemepower.

fortunes

je sais que je veux utiliser le .net Core 1.0 framework avec les technologies J'ai énumérés ci-dessus. Il a également dit qu'il voulait utiliser "fast cgi". Je ne sais pas ce que cela signifie soit.

ça veut dire qu'il veut pour utiliser un serveur web complet de haute performance comme Nginx (Engine-X), peut-être Apache.

Ensuite, il peut exécuter mono / dotnetCore avec un hébergement virtuel basé sur le nom (plusieurs noms de domaine sur la même IP) et/ou l'é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 tourne sur un fastcgi-server, et nginx transmet toutes les requêtes web pour un certain domaine via le protocole fastcgi-à celui serveur. Cela signifie également que votre site Web fonctionne 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 brouillés à destination.

Voir aussi ici et ici .

pour conclure:

.net Core n'est pas vraiment portable à l'heure actuelle, pas plus que ne l'est vraiment multiplateformes (en particulier les outils de débogage).

La compilation native n'est pas non plus facile, surtout pour ARM.

Et pour moi, il ne ressemble pas à son développement est "vraiment fini", encore.

par exemple, Système.Données.DataTable / DataAdaper.Mise à jour est manquant... (plus avec .net Core 2.0)

avec le système.Données.Commun.Bid * interfaces. (plus avec .net Core 1.1)

S'il y avait une classe qui est souvent utilisée, DataTable/DataAdapter serait elle...

Aussi, L'installateur Linux (.DEB) échoue, au moins sur ma machine, et je suis sûr que je ne suis pas le seul à avoir ce problème.

Debug, 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-post si vous faites cela - il y a un howto dans le wiki de VS-Code sur github), parce qu'ils n'offrent pas l'exécutable.

Yeoman échoue aussi. (Je suppose que cela a quelque chose à voir avec la version nodejs que vous avez installé - le code VS nécessite une version, Yeoman une autre... mais il devrait fonctionner sur le même ordinateur. assez boiteux

Peu importe qu'il tourne sur la version de noeud envoyée par défaut sur le système D'exploitation.

Jamais l'esprit qu'il ne devrait pas être dépendance sur NodeJS en premier lieu.

Le serveur kestell est également en cours de développement.

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 FastCGI-support signifie pour leur cadre, et encore moins qu'ils l'aient testé pour s'assurer que "tout fonctionne". En fait, je viens d'essayer de faire une application fastcgi avec .net Core et je viens de réaliser qu'il n'y a pas de bibliothèque FastCGI for .NET Core "RTM"...

ainsi, lorsque vous allez exécuter .NET Core" RTM "derrière nginx, vous ne pouvez le faire qu'en procurant des requêtes à kestrell (ce serveur web semi-fini dérivé de nodeJS)-il n'y a pas de support fastcgi à l'heure actuelle dans .NET Core" RTM", AFAIK. Comme il n'y a pas de bibliothèque fastcgi core.net, ni d'échantillons, 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 questionne aussi le performance.

Dans le (préliminaire) techempower-benchmark (round 13) , aspnetcore-linux se classe sur 25% par rapport à la meilleure performance, tandis que les cadres comparables comme Go (golang) se classent à 96,9% de la performance de pointe (et c'est lorsque le retour en clair sans accès au système de fichiers seulement). .NET Core fait un peu mieux sur JSON-serialization, mais il ne semble pas convaincant non plus (go atteint 98,5% de pic, .net core 65%). Cela dit, il ne peut pas éventuellement être pire que "mono approprié".

aussi, puisqu'il est encore relativement nouveau, toutes les grandes bibliothèques n'ont pas été portées (encore), et je doute que certaines d'entre elles soient jamais portées.

Le soutien de l'imagerie est également discutable au mieux.

Pour tout cryptage, utilisez plutôt le BouncyCastle.

pouvez-vous m'aider à donner un sens à tous ces termes et si mes attentes être réaliste ?

j'espère que je vous ai aidé à faire plus de sens avec tous ces termes.

En ce qui concerne vos attentes:

Développer une application Linux sans savoir quoi que ce soit sur Linux est une idée vraiment stupide en premier lieu, et il est également lié à l'échec d'une manière ou d'une autre horrible. Cela dit, Parce que Linux vient sans frais de licence, c'est une bonne idée en principe, mais SEULEMENT SI TU SAIS CE QUE TU FAIS.

Développer une application pour une plateforme 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 en sont les conséquences est une autre 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 soutien de débogage est un suicide, si votre projet est plus que juste une 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 pour vous - puis vous obtenez de savoir ce que le cadre et ce que les problèmes non-cadre sont.

vous pouvez par exemple monter en boucle une fat32, hfs ou JFS pour votre application, pour contourner les problèmes de sensibilité à la cas (montage en boucle non recommandé dans la production).

pour résumer

À l'heure actuelle, je resterais à L'écart de .net Core (pour l'utilisation en production). Peut-être que dans un ou deux ans, tu pourras regarder à nouveau, mais probablement pas avant.

Si vous avez un nouveau projet web que vous développez, démarrez-le dans .NET Core, pas en mono.



Si vous voulez un framework qui fonctionne sur Linux (x86/AMD64/ARMhf) et Windows et Mac, qui n'a pas de dépendances, c'est-à-dire seulement des liens statiques et aucune dépendance à .NET, Java ou Windows, utilisez Golang à la place. Il est plus mature, et ses performances sont prouvées (Baidu l'utilise avec 1 million d'utilisateurs concurrents), et golang a une empreinte mémoire nettement plus faible. Aussi golang est dans les dépôts, le .DEB installe sans problèmes, le code source compile - sans exiger de modifications - et golang (entre-temps) a un support de débogage avec delve et JetBrains Gogland 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 plus.

en ce qui concerne le mono, restez à l'écart.

Il n'est rien moins étonnant de voir à quel point mono est arrivé, mais malheureusement ce n'est pas un substitut à ses problèmes de performance/évolutivité et de stabilité pour les applications de production.

En outre, mono-développement est tout à fait mort, ils en grande partie seulement développer les pièces pertinentes à Android et iOS plus, parce que C'est là où Xamarin fait leur argent.

Ne vous attendez pas à ce que le développement Web soit un Xamarin/mono-citoyen de première classe.

.NET Core pourrait en valoir la peine, si vous commencez un nouveau projet, mais pour les grands projets existants de formulaires web, le portage est largement hors de question, les changements requis sont énormes. Si vous avez un MVC-projet, la quantité de changements pourrait être gérable, si votre la conception des applications était saine, ce qui n'est généralement pas le cas pour la plupart des applications existantes dites "développées historiquement".

Décembre 2016 Mise À Jour:

La compilation Native a été retirée de la prévisualisation .net Core, car elle n'est pas encore prête...



On dirait qu'ils se sont améliorés assez fortement sur le benchmark texte-fichier brut, mais d'un autre côté, il est devenu assez buggy. Aussi, il les indices de référence JSON se sont encore détériorés. Curieux aussi que le cadre d'entité doit être plus rapide pour les mises à jour que Dapper - bien que les deux à la lenteur d'enregistrement. Ce qui est très rare pour être vrai. On dirait qu'il y a encore plus que quelques bugs à chasser.



En outre, il semble y avoir un soulagement à venir sur le front de L'IDE Linux.

IntelliJ a publié "Project Rider", une première prévisualisation D'un IDE C#/.NET Core Pour Linux (et Mac et Windows), qui peut gérer les fichiers de projet Visual Studio. Enfin un C# IDE qui est utilisable et qui n'est pas lent comme l'enfer.

Conclusion: .NET Core est toujours un logiciel de qualité pré-publication en mars 2017. Portez vos bibliothèques, mais restez à l'écart pour l'utilisation de la production, jusqu'à ce que la qualité du cadre se stabilise.

Et gardez un oeil sur Project Rider.

buggy .net core

2017 mise à Jour

J'ai migré ma page d'accueil (de mon frère) vers le noyau.Net pour l'instant.

Jusqu'à présent, la durée D'exécution sur Linux semble être assez stable (au moins pour les petits projets) - il a survécu à un essai de charge avec facilité - mono n'a jamais fait.

En outre, il semble que j'ai confondu .NET-Core-native et .net-Core-self-contained-deployment. Le déploiement autonome fonctionne, mais il est un peu sous-documenté, bien qu'il soit super facile (les outils construire/publier sont un peu instables, mais - si vous rencontrez "nombre positif nécessaire. - Construire ÉCHOUÉ."- exécutez la même commande à nouveau, et cela fonctionne).

Vous pouvez exécuter

dotnet restore -r win81-x64
dotnet build -r win81-x64
dotnet publish -f netcoreapp1.1 -c Release -r win81-x64

et vous obtenez un autonome .exe-file (dans le répertoire de publication), que vous pouvez déplacer vers une machine Windows 8.1 sans framework.net installé et le laisser tourner. Beau. C'est ici que dotNET-Core commence à devenir intéressant. (mind the gaps, SkiaSharp ne fonctionne pas sur Windows 8.1 / Windows Server 2012 R2, [encore] - l'écosystème doit rattraper d'abord - mais il est intéressant, le Skia-dll-load-fail ne plante pas le serveur entier/application - donc tout le reste fonctionne) "1519150920

(Note: SkiaSharp sous Windows 8.1 ne possède pas les fichiers VC runtime appropriés - msvcp140.dll et vcruntime140.DLL. De les copier dans le publier-directory, et Skia va travailler sur Windows 8.1.)

Août 2017 Mise À Jour

.net Core 2.0 est sorti.

Attention: livré avec (rupture énorme) des changements dans l'authentification...

Par contre, il a ramené les classes DataTable/DataAdaper/DataSet, et bien d'autres.

Réalisé. le noyau de .NET manque toujours de support pour Apache SparkSQL, parce que Mobius n'est pas encore porté. C'est mauvais, parce que cela signifie pas de support SparkSQL pour mon IOT Cassandra Cluster, donc pas de jointures...

Support de bras expérimental (exécution seulement, pas de SDK - dommage pour devwork sur mon Chromebook - j'ai hâte à 2.1 ou 3.0).

PdfSharp est maintenant expérimentalement porté .NET de Base.

JetBrains Rider gauche EAP. Vous peut 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 le support .NET Core 2.0 soit opérationnelle.

Mai 2018 Mise À Jour

.net Core 2.1 libération imminente. Peut-être que cela va corriger L'authentification NTLM sur Linux (l'authentification NTLM ne fonctionne pas sur Linux {et peut-être Mac} dans .NET-Core 2.0 avec plusieurs en-têtes d'authentification, tels que negotiate, généralement envoyé avec ms-exchange, et apparemment ils ne le réparent qu'en v2.1, Pas de version bugfix pour 2.0).

Mais je n'installe pas de versions de preview sur ma machine. Donc en attente.

v2.On dit aussi que 1 réduit considérablement les temps de compilation. Ça serait bien.

aussi, notez que sur Linux, .net Core est 64 bits seulement !

Il n'existe pas, et il n'y aura pas, version x86-32 de .net Core sur Linux .

Et le port de bras est seulement le bras 32. Pas encore de bras-64.

Et sur ARM, vous (à l'heure actuelle) n'avez que le runtime, pas le dotnet-SDK.

et encore une chose:

Parce que .NET-Core utilise OpenSSL 1.0, .NET Core sur Linux ne fonctionne pas sur Arch Linux, et par dérivation pas sur Manjaro (la distribution Linux la plus populaire de loin en ce moment), car Arch Linux utilise OpenSSL 1.1. donc si vous utilisez Arch Linux, vous n'avez pas de chance (avec Gentoo, aussi).

À l'envers, la performance s'est nettement amélioré: fortunes

plaintext

.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 s'exécuteront que sous Windows, car WinForms/WPF utilisera L'API Windows.

PS:

export DOTNET_CLI_TELEMETRY_OPTOUT=1 

si vous l'avez utilisé sur windows, vous n'avez probablement jamais vu cela:

.NET des outils de Base collecter des données d'utilisation afin d'améliorer votre expérience.

Les données sont anonymes et ne comprennent pas la ligne de commande argument.

les données sont collectées par Microsoft et partagées avec communauté.

vous pouvez désactiver la télémétrie en paramétrant un DOTNET_CLI_TELEMETRY_OPTOUT environnement variable à 1 en utilisant votre shell favori.

pour en savoir plus. @ https://aka.ms/dotnet-cli-telemetry .

j'ai pensé mentionner que je pense que monodevelop (alias Studio Xamarin, le mono IDE) a évolué assez bien, et est - dans l'intervalle - Largement utilisable.

Cependant, JetBrains Rider (2018 EAP à ce stade) est certainement beaucoup plus agréable et plus fiable (et le décomposeur inclus est une vie plus sûre), c'est-à-dire, si vous développez .NET-Core sur Linux ou Mac.

clause de non-responsabilité:

Je n'utilise pas Mac, donc je ne peux pas dire si ce que j'ai écrit ici s'applique aussi au Mac basé sur FreeBSD-Unix. Je fais référence à la version Linux (Debian/Ubuntu/Mint) de JetBrains Rider, mono, Monodevel/VisualStudioMac/XamarinStudio et .NET-Core. En outre, Apple envisage de passer des processeurs Intel à un bras auto-fabriqué (ARM-64?) sur les processeurs, beaucoup de ce qui s'applique à Mac maintenant pourrait ne pas s'appliquer à un Mac avenir (2020+).

aussi, quand j'écris" mono est assez instable et lent", l'instable se rapporte à WinFroms & WebForms applications, spécifiquement l'exécution web-applications via fastcgi ou avec XSP (sur le 4.la version x de mono), ainsi que les particularités de gestion de XML-serialization, et le tout-lent se rapporte aux WinForms, et aux expressions régulières en particulier (ASP.NET-MVC utilise aussi des expressions régulières pour l'acheminement).

Quand j'écris sur mon expérience du mono 4.x, cela ne signifie pas non plus nécessairement que ces problèmes n'ont pas encore été résolus, ou au moment où vous lisez ceci, ni que s'ils sont corrigés maintenant, qu'il ne peut pas y avoir de régression plus tard qui réintroduise l'un 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 utilisez le mono runtime du système (dev). Cela ne signifie pas non plus que l'intégration du mono-runtime (n'importe où) est nécessairement gratuite.

Tout ce qui ne signifie pas nécessairement mono est mal adapté pour 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é, coûts et la performance sur ces plates-formes. Évidemment, si vous utilisez .NET sur Android, vous avez d'autres considérations de coûts à faire aussi, comme la pondération xamarin-coûts par rapport aux coûts et le temps pour transférer le code existant à Java. Un entend mono sur Android et IOS sera très bon. Prendre avec un grain de sel. Par exemple, ne vous attendez pas à ce que l'encodage système par défaut soit le même sur android/ios que sur Windows, et ne vous attendez pas à ce que le système de fichiers android ne soit pas sensible à la casse.

152
répondu Stefan Steiger 2018-09-12 08:44:20

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 y a deux implémentations CLR" complètes", le Microsoft native .NET CLR (pour Windows) et le Mono CLR (qui lui-même a des implémentations Pour Windows, linux et unix (Mac OS X et FreeBSD)). Un CLR complet, c'est exactement tout ce dont vous avez besoin. Ainsi, les Plc" complets " ont tendance à être de grande taille.

Core CLRs d'autre part, ils sont coupés, et beaucoup plus petites. Parce qu'ils ne sont qu'une implémentation de base, il est peu probable qu'ils aient tout ce dont vous avez besoin en eux, donc avec les CLR de base vous ajoutez des ensembles de fonctionnalités au CLR que votre produit logiciel spécifique utilise, en utilisant NuGet. Il y a des implémentations CLR pour Windows, linux (various) et unix (Mac OS X et FreeBSD) dans le mix. Microsoft a ou est en train de réaménager les bibliothèques .net framework pour le Core CLR, afin de les rendre plus portables pour le core context. Compte tenu de la présence de mono sur *nix OSs, il serait surprenant que le noyau CLRs pour *nix n'inclue pas de base de code mono, mais seulement la communauté Mono et Microsoft pourrait nous le dire à coup sûr.

aussi, je suis D'accord avec Nico dans le fait que les CLR de base sont nouveaux -- C'est à RC2 en ce moment je pense. Je ne m'en remettrais pas encore au code de production.

pour répondre à votre question vous pourriez livrer votre site sur linux en utilisant Core CLR ou Mono, et ce sont deux différents façons de le faire. Si vous voulez un pari sûr maintenant, je dirais mono sur linux, puis port si vous voulez plus tard, sur Core.

45
répondu muszeo 2016-06-10 10:37:44

vous avez choisi non seulement un chemin réaliste, mais sans doute l'un des meilleurs écosystèmes fortement soutenus(aussi x-plates-formes) par MS. vous devriez toujours considérer les points suivants:

  • mise à Jour: Principaux doc sur .Net plate-forme standard est ici: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
  • mise à jour: le Mono 4.4.1 actuel ne peut pas être lancé au dernier moment Asp.Net core 1.0 RTM
  • bien que mono soit plus complet, son avenir n'est pas clair, parce que MS le possède depuis quelques mois maintenant et c'est un travail en double pour eux de le supporter. Mais la sclérose en plaques est définitivement engagée dans le noyau.net et de miser gros sur elle.
  • bien que le noyau.net soit libéré, l'écosystème tiers n'est pas tout à fait là. Par exemple, Nhibernate, Umbraco, etc. ne peuvent pas encore fonctionner sur .Net core. Mais ils ont un plan.
  • il y a certaines caractéristiques manquantes dans .Net de Base comme Système.Le dessin, vous devriez regarder pour la 3e partie des bibliothèques
  • vous devez utiliser nginx comme serveur frontal avec kestrelserver pour asp.net applications, parce que kestrelserver n'est pas tout à fait prêt pour la production. Par exemple, HTTP / 2 n'est pas implémenté.

j'espère que cela aide

13
répondu Otabek Kholikov 2016-07-07 11:27:55

.net Core ne nécessite pas mono dans le sens du cadre mono. .Net Core est un framework qui fonctionnera sur plusieurs plateformes, y compris Linux. Référence https://dotnet.github.io / .

cependant le noyau.Net peut utiliser le cadre 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 disponible), toutefois mono n'est pas un Microsoft supported framework et recommanderait l'utilisation d'un support framework

maintenant entity framework 7 est maintenant appelé Entity Framework Core et est disponible sur plusieurs plateformes, y compris Linux. Référence https://github.com/aspnet/EntityFramework (examen de la feuille de route)

j'utilise actuellement ces deux cadres cependant vous devez comprendre qu'il est encore en phase de candidat de libération ( RC2 est la version actuelle) et au-dessus des candidats bêta et de libération il y a eu 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 un choix de serveurs Web (d'où je présume que la référence fast cgi 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.html

je me rends compte que ce post finit par être principalement des liens vers la documentation, mais à ce stade, ce sont vos meilleures sources d'information. .Net core est encore relativement nouveau dans la communauté .Net et jusqu'à sa libération complète j'hésiterais à l'utiliser dans un environnement de produit étant donné les changements entre la version publiée.

9
répondu Nico 2016-06-10 00:29:38

cette question est particulièrement actuelle car hier Microsoft a annoncé officiellement . 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:

  • Api - .NET de Base contient beaucoup de le même, mais de moins en moins de , Api que l' .NET Framework, et avec un factoring différent (les noms d'assemblage sont

    différent; la forme du type diffère dans les cas clés). Ces différences

    actuellement, il est généralement nécessaire de modifier le port source vers .NET Core. .NET Core implémente L'API de bibliothèque standard .NET, qui passera à

    inclure une plus grande partie des API .NET Framework BCL au fil du temps.
  • Subsystems-.NET Core implémente un sous-ensemble de sous-systèmes dans le Cadre. net, avec l'objectif d'une mise en œuvre plus simple et

    modèle de programmation. Par exemple, la sécurité D'accès au Code (CAS) n'est pas

    prise en charge, tandis que la réflexion est prise en charge.

si vous avez besoin de lancer quelque chose rapidement, allez avec Mono car il est actuellement (juin 2016) produit plus mature, mais si vous construisez un site web à long terme, je suggérerais .net Core. Il est officiellement soutenu par Microsoft et la différence dans APIs pris en charge disparaîtra probablement bientôt, en tenant compte de L'effort que Microsoft met dans le développement de .net Core.

mon but est d'utiliser C#, LINQ, EF7, visual studio pour créer un site web cela peut être exécuté/hébergé sous linux.

Linq et Entity framework sont inclus dans .NET Core , de sorte que vous êtes en sécurité pour tirer un coup.

6
répondu Miljen Mikic 2016-06-28 11:18:30

Pour être simple,

Mono est la mise en œuvre par une tierce partie du cadre .Net pour Linux / Android /iOs

.Net Core est la propre implémentation de microsoft pour same.

. le noyau Net est l'avenir. et Mono seront morts par la suite. Cela étant dit, le noyau de. Net n'est pas suffisamment mûri. J'avais du mal à l'implémenter avec IBM Bluemix et j'ai abandonné l'idée plus tard. Dans le temps (peut être 1-2 ans), il devrait être mieux.

2
répondu Thakur 2016-10-06 07:39:19