.NET Core和PCL之间的区别是什么?

时间:2015-08-04 15:40:16

标签: c# .net cross-platform portable-class-library .net-core

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

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

基本上,我不知道.NET Core与PC重塑PCL有何不同,并且说" 支持注意我们要开源和定位非Windows平台!"

所以最重要的是,PCL是否与.NET Core兼容,反之亦然?它们之间的区别是什么?

2 个答案:

答案 0 :(得分: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 app)。这有效地结束了平台的组合噩梦。先前的目标组合dnxcore5+net45在平台库之间创建了一个交集,每次添加都会使情况更糟。另一方面,dotnet不会限制目标上的库,而是将此限制决策转发给其依赖项(突然出现新的限制,如着名的unicorn平台)。

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

回答你的问题:

  • 如果您根据图书馆的需要添加目标dotnetdnxcore50uap10.0,则您的PCL与.Net Core风格环境(如DNX和UWP)兼容(请参阅Owen&# 39;与合同相同的基本兼容性的文章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开始,所有平台(.NET Core,.NET Framework,Xamarin,Mono,Unity3D)都会实现一个通用合约(netstandard.dll)。此合同将随着时间的推移而延长,平台必须放弃对最新标准的支持,抛出NotImplementedException或实现它。

答案 1 :(得分:0)

我的理解是他们在概念上都不同。

  • .NET Portable构建于.NET Full,.NET Core,Windows Phone等之上,作为一种“桥接层”。
  • 它实际上没有具体的实施,认为它是一个'包' “接口'(合同)”的集会。
  • .NET Portable' Package'的范围。是动态的,取决于什么'目标'你要去的平台“桥梁”。它是您定位的平台的交叉点,小包装的平台越多。
  • 在运行时,这个可移植层被挂钩/适应.NET full,.net core或...的实际实现。