我最近正在为我的 PCL 编写支持的平台,其中之一是其他 PCL。如果我的库(面向 .NET Framework 4.5 和 Windows/Phone 8.1)也可以用于 .NET Core 项目,我感到很困惑。
据我了解,PCL 允许您跨多个平台共享代码而无需重新编译,而 .NET Core 也可以这样做。唯一的区别是 .NET Core 面向更多少数平台,即 OS X 和 Linux,并且是开源的。
从本质上讲,我看不出 .NET Core 与 Microsoft reshape PCL 并说“请注意我们将开源并面向非 Windows 平台!”有何不同?
所以底线是,PCL 是否与 .NET Core 兼容,反之亦然?它们有什么区别?
最佳答案
有一个关于它的漂亮文章系列,解决了我围绕它的问题......
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 包中(每个包都可用于 SDKs 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
,您的 PCL 将与 DNX 和 UWP 等 .Net Core 风格环境兼容,dnxcore50
或uap10.0
取决于您图书馆的需要(请参阅 Owen 的文章了解与契约(Contract)配置文件 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)。该契约(Contract)将随着时间的推移而延长,平台必须放弃对最新标准的支持,抛出 NotImplementedException 或实现它。
关于c# - .NET Core 和 PCL 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813609/