2015-08-04 19 views
14

Stavo scrivendo le piattaforme supportate per il mio PCL recentemente, una delle quali sono altri PCL. Ero confuso se la mia libreria (che ha come target .NET Framework 4.5 e Windows/Phone 8.1) può essere utilizzata anche nei progetti .NET Core.Qual è la differenza tra .NET Core e PCL?

A quanto ho capito, le PCL consentono di condividere il codice su più piattaforme senza ricompilazione, mentre .NET Core fa altrettanto. L'unica differenza è che .NET Core si rivolge a poche piattaforme, ad esempio OS X e Linux, ed è open source.

Quindi, in sostanza, non vedo come .NET Core è diverso rispetto a Microsoft rebranding del PCL e dicendo "ATTENZIONE stiamo andando open source e piattaforme non Windows rivolti!"

Quindi la linea di fondo è, sono PCL compatibili con .NET Core e viceversa? Qual è la differenza tra loro?

risposta

14

C'è una bella serie di articoli su di esso che ha risolto le mie domande intorno ad esso ...

https://oren.codes/2015/06/16/demystifying-pcls-net-core-dnx-and-uwp-redux/ https://oren.codes/2015/07/29/targeting-net-core/

Net Core ha tutte le sue librerie (per esempio System.IO) in confezioni separate (Nuget ognuno di essi è disponibile per gli SDK DNX, UWP e .Net 4.6). Le librerie di terze parti sono indirizzate allo dnxcore50 (DNX) o allo uap10.0 (UWP) se accedono alla piattaforma in modo nativo o fanno affidamento sulle loro funzionalità. Se non accedono alla piattaforma ma fanno affidamento solo su altri pacchetti, devono scegliere come target dotnet.

dotnet significa effettivamente: Sono compatibile con qualsiasi piattaforma che soddisfa le mie dipendenze (la libreria XYZ "dotnet", che utilizza System.Reflection dnxcore5+net45 non poteva essere utilizzato da un'applicazione UWP uap10.0). Questo termina efficacemente l'incubo combinatorio delle piattaforme. La precedente combinazione di target dnxcore5+net45 ha creato un'intersezione tra le librerie di piattaforme e ogni aggiunta renderebbe la situazione ancora peggiore. dotnet sull'altro lato non limita la libreria su una destinazione ma inoltra questa decisione di restrizione alle sue dipendenze (dove improvvisamente si possono visualizzare nuove restrizioni come la famosa piattaforma unicorn).

Pertanto come autore di una libreria è possibile scegliere come target dotnet se sono necessarie solo altre librerie.

rispondere alla tua domanda:

  • tuo PCL è compatibile con gli ambienti in stile .Net fondamentali, quali DNX e UWP se si aggiunge il bersaglio dotnet, dnxcore50 o uap10.0 a seconda della necessità della vostra libreria (vedi l'articolo di Owen per stessa compatibilità di base con il contratto Profilo 259).
  • . Net Core è molto più di un set di librerie PCLed. Si tratta di un nuovo CLR, un nuovo framework organizzato (confezionato in piccole parti) e l'infrastruttura per i nuovi SDK .Net (DNX, UWP e tutto ciò che viene dopo). Il termine ".Net Core" mira sia alla libreria di classi di base "CoreFx" che al CLR "CoreCLR". Ma le piattaforme reali sono in realtà DNX (dal team ASP.Net) e UWP (dal team Windows).

Tutta la risposta è la mia attuale comprensione della situazione della libreria .Net Core. È un lavoro in corso, e come menzionato nei post, non ancora documentato pubblicamente.

NOTA dicembre 2016: Siate consapevoli, dotnet come il predecessore di netstandard1.x è cambiato nel suo concetto a partire netstandard2.x (.NET Nucleo 2,0; ~ giugno 2017). A partire da netstandard2.0 ci sarà il un contratto comune (il netstandard.dll) implementato da tutte le piattaforme (.NET Core, .NET Framework, Xamarin, Mono, Unity3D). Questo contratto sarà esteso nel tempo e la piattaforma dovrà abbandonare il supporto per l'ultimo standard, lanciare NotImplementedException o implementarlo.

0

La mia comprensione è che entrambi sono in concetto diversi.

  • .NET portatile basato su .NET completo, .NET Core, Windows Phone, ecc., Come una sorta di "livello di bridging".
  • In realtà non ha alcuna implementazione concreta, considerarlo un "pacchetto" di assiemi delle "interfacce" (contratti).
  • Lo scopo di .NET Portable 'Package' è dinamico, dipende da quali piattaforme 'Targets' si intende 'bridge'. È un'intersezione delle piattaforme che scegli come target, più piattaforme sono il pacchetto più piccolo.
  • Durante il runtime, questo livello portatile è agganciato/adattato all'implementazione reale di .NET full, .net core o ...
Problemi correlati