.NET Core 和 PCL 有啥区别?
Posted
技术标签:
【中文标题】.NET Core 和 PCL 有啥区别?【英文标题】:What's the difference between .NET Core and PCLs?.NET Core 和 PCL 有什么区别? 【发布时间】:2015-10-27 02:43:34 【问题描述】:我最近正在为我的 PCL 编写支持的平台,其中之一是其他 PCL。如果我的库(针对 .NET Framework 4.5 和 Windows/Phone 8.1)也可以在 .NET Core 项目中使用,我感到很困惑。
据我了解,PCL 允许您跨多个平台共享代码而无需重新编译,而 .NET Core 也可以。唯一的区别是 .NET Core 面向少数个平台,即 OS X 和 Linux,并且是开源的。
所以本质上,我看不出 .NET Core 与 Microsoft 重新命名 PCL 并说“注意我们将开源并针对非 Windows 平台有什么不同!”
所以底线是,PCL 是否与 .NET Core 兼容,反之亦然?它们有什么区别?
【问题讨论】:
【参考方案1】:有一个关于它的漂亮文章系列解决了我关于它的问题......
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 与 DNX 和 UWP 等 .Net Core 风格的环境兼容(请参阅 Owen 的文章以了解与合同概要 259)。
.Net Core 不仅仅是一组 PCLed 库。它是一个新的 CLR、一个新的有组织的框架(打包成小部分)和新的 .Net SDK(DNX、UWP 以及接下来出现的任何东西)的基础架构。术语“.Net Core”同时针对基类库“CoreFx”和 CLR“CoreCLR”。但真正的平台实际上是 DNX(由 ASP.Net 团队提供)和 UWP(由 Windows 团队提供)。
所有这些答案都是我目前对 .Net Core 库情况的理解。它正在进行中,就像帖子中提到的那样,尚未公开记录。
注意 2016 年 12 月:请注意,dotnet
作为 netstandard1.x
的前身,其概念从 netstandard2.x
开始发生了变化(.NET Core 2.0;~2017 年 6 月)。从netstandard2.0
开始,所有平台(.NET Core、.NET Framework、Xamarin、Mono、Unity3D)都会实现一个通用合同(netstandard.dll)。该合同将随着时间的推移而延长,平台必须放弃对最新标准的支持,抛出 NotImplementedException 或实施它。
【讨论】:
【参考方案2】:我的理解是它们在概念上是不同的。
.NET Portable 建立在 .NET Full、.NET Core、Windows Phone 等之上,作为一种“桥接层”。 它实际上没有具体实现,将其视为“接口”(合同)的程序集的“包”。 .NET 便携式“包”的范围是动态的,取决于您要“桥接”的“目标”平台。它是您定位的平台的交集,平台越多,包越小。 在运行时,这个 Portable 层被挂钩/适应 .NET full、.net core 或...的实际实现。【讨论】:
以上是关于.NET Core 和 PCL 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
.Net Framework 和 .Net Core 有啥区别? [复制]
.net Core 多目标和 .net Standard 有啥区别?
.NET 4.5.x 和 .NET Core 有啥区别? [关闭]
.NET Framework 开发包和.net core 有啥区别? [复制]