我最近为我的PCL编写了支持的平台,其中一个是其他PCL。如果我的库(针对.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兼容,反之亦然?它们之间的区别是什么?
答案 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
。
回答你的问题:
dotnet
,dnxcore50
或uap10.0
,则您的PCL与.Net Core风格环境(如DNX和UWP)兼容(请参阅Owen&# 39;与合同相同的基本兼容性的文章259)。所有这些答案都是我目前对.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)
我的理解是他们在概念上都不同。