Novità dal mondo .NET

5 set 2017 22.46

_Logo Nelle ultime settimane le novità in casa .NET sono state tante, a cominciare dall'importante rilascio delle specifiche .NET Standard 2.0 seguite da .NET Core 2.0, ASP.NET Core 2.0, EF 2.0 e quindi da Visual Studio 2017 Version 15.3 (nonché dell'altrettanto importante ReSharper 2017.2) e C# 7.1.

Le novità sono importanti perché segnano un punto di consolidamento del nuovo .NET che ora espande notevolmente il supporto alle API della versione classica nonché il supporto a piattaforme non Windows. Nel video di presentazione Scott Hunter descrive con alcuni collaborati tutte queste novità, disponibili in dettaglio sui vari blog istituzionali di Microsoft:

E' naturalmente necessario scaricare lo SDK per il Core 2.0, anche se si aggiorna all'ultima versione di Visual Studio 2017:

.Net Core 2

Hunter si ritiene soddisfatto per i risultati della standardizzazione del .NET e per la svolta open source: il numero di pull request è aumentato di anno in anno e la .NET Foundation è supportata tra gli altri da Samsung, Unity, RedHat, Google e Qualcomm. Interessante il lavoro di Samsung per il proprio sistema Tizen, il sistema linux-based utilizzato da tutta la gamma smart dei propri prodotti.

Il .NET Standard è un insieme standardizzata di API da implementare in grado di omogeneizzare le implementazioni .NET per qualsiasi piattaforma evitando future frammentazioni.

Una chiara descrizione di che cosa sia .NET Standard è disponibile nel post di Daniel Crabtree: con un'analogia si potrebbe sire che è l'interfaccia implementata sia da .NET Core sia da .NET Framework. L'obiettivo è unificare le diverse piattaforme .NET e superare la precedente soluzione delle Portable Class Libraries (che rappresentava un'intersezioen delle API e richiedeva la ricoipilazione per ogni piattaforma). Con la versione 2.0 abbiamo, come accennato, il Compatibility Mode: la possibilitò di richiamare da un progetti .NET Starndard librerie NET Framework, a patto che utilizzimno solo API convogliarte nello stanrdard .NET.

Come si può notare in Visual Studio è possibie creare librerie .NeT Starndard ma non applicazioni: in questo caso bisogno utilizzare una piattaforma specifica, come .NET Core o .NET Framework. Quindi per l'applicazione si utilizzerà l'ultima ver5sione disponibile mentre per le librerie si potrebber unsare la versione più vecchia (a patto che esponga tutte le API di cui si ha bisogno).

Librarie .NET Framework non dovrebbero essere più create a maneno che non richiedano AAPI non sandard, come WPF.

.Net Standard API

Ecco alcuni appunti relativi alle novità della versione 2 del .NET Core:

  • È la versione del .NET più veloce di sempre (a questo proposito Hunter cita l’esempio di Raygun che passando al .NET Core da Node.js ha potuto gestire 20000 richieste per secondo rispetto alle 1000 gestite in precedenza).
  • Quasi il doppio delle API rispetto alla versione classica, tra cui il supporto a XML, Serialization, Networking, IO e Threading.
  • Compatibilità con i pacchetti creati con versioni precedenti del .NET se le API utilizzate rientrano nel nuovo .NET Standard 2.0 (si tratta di circa il 70% dei pacchetti NuGet). L’introduzione del cosidetto Compatibility Shim permette quindi di utilizzare le liberarie .NET Framework, in aggiunta naturalmente alle librerie .NET Standard e PCL.
  • Packaging semplificato (per ASP.NET Core è possibile sostituire i pacchetti Microsoft.AspNetCore.* con Microsoft.AspNetCore.All: in fase di pubblicazione saranno inclusi solo i pacchetti effettivamente utilizzati).
  • Supporto a più distribuzioni Linux e in particolare partnership con RedHat per la distribuzione [RedHat Enterprise][redhatloves.net]. .NET Core 2.0 treats Linux as a single operating system. There is now a single Linux build (per chip architecture) that works on all Linux distros
  • Several important improvements were made to .NET Core support for Docker during the 2.0 project.

Ma quali sono i sistemi su cui la nuova versione .NET può girare? Windows Client, Windows Server, Windows IoT, Red Hat Enterprise Linux (Centos and Oracle Linux), Fedora, Debian, Ubuntu, openSUSE, Tizen e Mac OS X.

L’aggiornamenti di Visual Studio 2017 Version 15.3 è dedicato in parte ad aumentare il supporto al .NET Core ed ora è possibile create qualsiasi tipo di progetto Core (naturalmente rimane il supporto ai tool a linea di comando). L’aggiornamento include comunque delle novità anche sulle funzionalità di Visual Studio, con maggiori strumenti dedicati al refactoring (la cui mancanza era sopperita da estensioni esterne come ReSharper).

Recentemente sono inoltre usciti due service pack per Visual Studio (siamo alla versione 15.3.3) e soprattutto l’aggiornamento di ReSharper che finalmente supporta il nuovo .Net Core e le nuove funzionalità del C#.

Non poteva mancare una versione aggiornata nel .NET Framework classico, che è ora disponibile in versione 4.7.1:

  • Supporto al.NET Standard 2.0.
  • Miglioramenti al Visual Tree per le applicazioni WPF.
  • Vari miglioramenti alle performance e all’affidabilità.

Per quanto riguarda ASP.NET Core:

  • Più veloce: ad esempio le pagine cshtml (e le nuove Razor Page) vengono precompilate per default alla pubblicazione.
  • Razor Pages: costruite su MVC ma più pratiche perché concentrano in un’unica struttura le tre componenti del Model View Controller.
  • Supporto al C# 7.1 di Razor.
  • Vi sono più Template (dedicati a Angular e React per creare selle SPA con il .NET Core come back end e alle nuove Razor Pages).

Abbiamo poi Entity Framework 2.0 che, essendo basato sul Core, può essere usato ovunque il .NET Standard sia supportato. Queste alcune delle novità:

  • Table splitting
  • Global query filter
  • Scalar database function mapping
  • LINQ implementation improvements (alcuni comandi che venivano eseguiti lato client sono ora tradotti in SQL)
  • Performance imporovemtne (DbContext pooling e explicit compiled qeuires)
  • Supporto a EF.Functions.Like(xxx, "a%")
  • Global query filters: modelBuilder.Entity().HasQueryFilter(p => !p.IsDeleted);
  • String interpolation in raw SQL methods

La roadmap di EF è comunque lunga: ad esempio il GroupBy viene eseguito in memoria e non sul motore di database (l’alternativa è chiamare un FromSql con una query composta manualmente).

PS. Non essendoci un logo ufficiale per il .NET Core ho utilizzato quanto creato da un fan e disponibile in GitHub.

Tag: .NET Core