it-swarm.dev

.NET Core vs Mono

Qual è la differenza tra .NET Core e Mono?

Ho trovato una dichiarazione sul sito ufficiale che diceva: "Il codice scritto per questo è anche portatile tra gli stack di applicazioni, come ad esempio Mono."

Il mio obiettivo è utilizzare C #, LINQ, EF7 e Visual Studio per creare un sito Web che può essere eseguito/ospitato su Linux.

Qualcuno mi ha detto che voleva che fosse "in mono", ma non so cosa significhi. So che voglio utilizzare .NET Core 1.0 con le tecnologie che ho elencato sopra. Ha anche detto che voleva usare "CGI veloce". Non so cosa voglia dire.

Puoi aiutarmi a dare un senso a tutti questi termini e se le mie aspettative sono realistiche?

189
Captainlonate

Nel mondo .NET ci sono due tipi di CLR, CLR "completi" e CLR core, e questi sono cose molto diverse.

Esistono due implementazioni CLR "complete", il CLR nativo Microsoft (per Windows) e il CLR mono (che ha implementazioni per Windows, linux e unix (Mac OS X e FreeBSD)). Un CLR completo è esattamente questo - tutto, praticamente, di cui hai bisogno. Pertanto, i CLR "pieni" tendono ad essere di grandi dimensioni.

I CLR core sono invece tagliati e molto più piccoli. Poiché sono solo un'implementazione di base, è improbabile che abbiano tutto ciò che serve al loro interno, quindi con Core CLR si aggiungono set di funzionalità al CLR utilizzato dal prodotto software specifico, utilizzando NuGet. Ci sono implementazioni Core CLR per Windows, linux (varie) e unix (Mac OS X e FreeBSD) nel mix. Microsoft ha o sta refactoring anche le librerie framework .NET per Core CLR, per renderle più portabili per il contesto principale. Data la presenza di mono sui sistemi operativi * nix sarebbe una sorpresa se i Core CLR per * nix non includessero alcuni codici mono base, ma solo la community Mono e Microsoft potrebbero dircelo di sicuro.

Inoltre, sono d'accordo con Nico in quanto i Core CLR sono nuovi - è al momento in RC2 al momento giusto. Non dipenderei ancora da questo per il codice di produzione.

Per rispondere alla tua domanda potresti consegnare il tuo sito su linux usando Core CLR o Mono, e questi sono due modi diversi di farlo. Se vuoi una scommessa sicura adesso andrei con mono su linux, quindi portalo se vuoi in seguito, su Core.

50
muszeo

Hai scelto non solo un percorso realistico, ma probabilmente uno dei migliori ecosistemi sostenuti con forza (anche le piattaforme X) da MS. Tuttavia dovresti considerare i seguenti punti:

  • Aggiornamento: il documento principale sullo standard della piattaforma .NET è disponibile qui: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
  • Aggiornamento: corrente Mono 4.4.1 non può eseguire l'ultimo core 1.0 AspM di Asp.Net
  • Anche se mono è più completo di funzionalità, il suo futuro non è chiaro, perché MS lo possiede da alcuni mesi e ha un duplice lavoro per supportarlo. Ma la MS è decisamente impegnata a .Net Core e scommette su di essa.
  • Sebbene il nucleo .Net sia stato rilasciato, l'ecosistema di terze parti non è proprio lì. Ad esempio, Nibernate, Umbraco, ecc., Non possono ancora eseguire il nucleo .Net. Ma hanno un piano.
  • Ci sono alcune funzionalità mancanti in .Net Core come System.Drawing, dovresti cercare librerie di terze parti
  • Dovresti usare nginx come front server con kestrelserver per le app di asp.net, perché kestrelserver non è ancora pronto per la produzione. Ad esempio HTTP/2 non è implementato.

Spero possa essere d'aiuto

13
Otabek Kholikov

.Net Core non richiede mono nel senso della struttura mono. .Net Core è un framework che funziona su più piattaforme, incluso Linux. Riferimento https://dotnet.github.io/ .

Tuttavia, il nucleo .Net può utilizzare il framework mono. Riferimento https://docs.asp.net/it/1.0.0-rc1/getting-started/choosing-the-right-dotnet.html (nota rc1 documentatiopn no rc2 disponibile), tuttavia mono non è un framework supportato da Microsoft e raccomanderebbe l'uso di un framework supportato 

Ora l'entity framework 7 è ora chiamato Entity Framework Core ed è disponibile su più piattaforme, incluso Linux. Riferimento https://github.com/aspnet/EntityFramework (rivedere la cartina stradale)

Attualmente sto usando entrambi questi framework, ma devi capire che è ancora in fase di rilascio del candidato (RC2 è la versione corrente) e oltre i beta e release candidate ci sono stati enormi cambiamenti che di solito finiscono con il tuo grattarsi la testa.

Ecco un tutorial su come installare MVC .Net Core in Linux. https://docs.asp.net/it/1.0.0-rc1/getting-started/installing-on-linux.html

Finalmente avete una scelta di Web Server (da cui presumo che il riferimento fast cgi provenga) per ospitare la vostra applicazione su Linux. Ecco un punto di riferimento per l'installazione in un ambiente Linux. https://docs.asp.net/it/1.0.0-rc1/publishing/linuxproduction.html

Mi rendo conto che questo post finisce per essere principalmente link alla documentazione, ma a questo punto quelle sono le migliori fonti di informazione. Il nucleo .Net è ancora relativamente nuovo nella comunità .Net e fino a quando non sarà completamente rilasciato sarei restio a utilizzarlo in un ambiente di prodotto, date le ultime modifiche tra la versione rilasciata.

9
Nico

Questa domanda è particolarmente attuale perché ieri Microsoft ha ufficialmente annunciato .NET Core 1.0 release . Supponendo che Mono implementa la maggior parte delle librerie .NET standard, la differenza tra Mono e .NET core può essere vista attraverso la differenza tra .NET Framework e .NET Core:

  • API: .NET Core contiene molte delle stesse API , ma meno, come .NET Framework e con un diverso factoring (i nomi degli assembly sono
    diverso; la forma del tipo differisce nei casi chiave). Queste differenze
    attualmente in genere richiedono modifiche a port source in .NET Core. .NETTO Il Core implementa l'API della libreria standard di .NET, destinata a crescere
    includere più API .NET Framework BCL nel tempo.
  • Sottosistemi - .NET Core implementa un sottoinsieme dei sottosistemi in .NET Framework, con l'obiettivo di un'implementazione più semplice e
    modello di programmazione. Ad esempio, Code Access Security (CAS) non lo è
    supportato, mentre la riflessione è supportata.

Se hai bisogno di lanciare qualcosa velocemente, vai con Mono perché è attualmente (giugno 2016) un prodotto più maturo, ma se stai costruendo un sito web a lungo termine, ti suggerirei .NET Core. È ufficialmente supportato da Microsoft e la differenza nelle API supportate probabilmente scomparirà presto, tenendo conto dello sforzo che Microsoft pone nello sviluppo di .NET Core.

Il mio obiettivo è usare C #, LINQ, EF7, visual studio per creare un sito web che può essere eseguito/ospitato in linux.

Linq ed Entity framework sono inclusi in .NET Core , quindi puoi tranquillamente scattare una foto.

7
Miljen Mikic

Per essere semplice, 

Mono è l'implementazione di terze parti del framework .Net per Linux/Android/iOs

.Net Core è l'implementazione stessa di Microsoft per lo stesso.

.Net Core è futuro. e Mono alla fine sarà morto. Detto questo. Net Core non è abbastanza maturo. Stavo faticando a implementarlo con IBM Bluemix e successivamente ho abbandonato l'idea. Giù il tempo (potrebbe essere 1-2 anni), dovrebbe essere migliore.

2
Thakur

In poche parole:

Mono = Compilatore per C #

Mono Develop = Compiler + IDE

.Net Core = ASP Compilatore

Il caso attuale di .Net Core è web solo non appena adotta uno standard aperto di winform e una più ampia adozione linguistica, potrebbe essere finalmente la centrale di sviluppo di killer di Microsoft. Considerando la recente mossa di licenza Java di Oracle, Microsoft ha un tempo enorme per brillare.

0
mrcrunch