.NET Core和PCL有什么区别?

Jam*_* Ko 16 .net c# cross-platform portable-class-library .net-core

我最近为我的PCL编写了支持的平台,其中一个是其他PC​​L.如果我的库(针对.NET Framework 4.5和Windows/Phone 8.1)也可以在.NET Core项目中使用,我感到很困惑.

据我所知,PCL允许您跨多个平台共享代码而无需重新编译,而.NET Core也可以这样做.唯一的区别是,.NET的核心目标一个更多的平台,即OS X和Linux,并且是开源的.

基本上,我看不出.NET Core 与PC 重塑PCL有什么不同,并说"请注意我们要开源并针对非Windows平台!"

那么底线是PCL与.NET Core兼容,反之亦然?他们之间有什么区别?

Tho*_*mas 14

有一篇关于它的精美文章系列解决了我的问题......

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将他所有的库(例如System.IO)放在单独的NuGet包中(每个包都可用于SDK DNX,UWP和.Net 4.6).第三方库目标dnxcore50(DNX)或uap10.0(UWP),如果他们本地访问平台或依赖其功能.如果他们不访问平台但只依赖其他软件包,他们应该以目标为目标dotnet.

dotnet有效意味着:我与任何满足我的依赖关系的平台兼容(你的库XYZ"dotnet"使用System.Reflection dnxcore5+net45不能被UWP uap10.0应用程序使用).这有效地结束了平台的组合噩梦.之前的目标组合dnxcore5+net45创建了平台库之间的交集,每次添加都会使情况更糟.dotnet另一方面,不会限制目标上的库,而是将此限制决策转发给其依赖项(突然出现像着名unicorn平台这样的新限制).

因此,作为图书馆作者,dotnet如果您只需要其他库,则可以定位.

回答你的问题:

  • 如果添加目标dotnet,dnxcore50或者uap10.0根据库的需要,您的PCL与.Net Core风格环境(如DNX和UWP)兼容(请参阅Owen的文章,了解与合同Profile 259相同的基本兼容性).
  • .Net Core不仅仅是一组PCLed库.它是一个新的CLR,一个新的有组织的框架(打包成小部件)和新的.Net SDK的基础设施(DNX,UWP,以及接下来的任何内容).术语".Net Core"同时针对基类库"CoreFx"和CLR"CoreCLR".但真正的平台实际上是DNX(由ASP.Net团队)和UWP(由Windows团队).

所有这些答案都是我目前对.Net核心库情况的理解.这项工作正在进行中,如同在帖子中提到的那样,尚未公开记录.

注意2016年12月:请注意,dotnet作为其前身netstandard1.x改变了它的概念netstandard2.x(.NET Core 2.0; ~JUN 2017).从一开始netstandard2.0就会有一个共同的合同(netstandard.dll),所有平台(.NET Core,.NET Framework,Xamarin,Mono,Unity3D)都可以实现.此合同将随着时间的推移而延长,平台必须放弃对最新标准的支持,抛出NotImplementedException或实现它.