c# - .NET Core 和 PCL 之间有什么区别?

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

我最近正在为我的 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 风格环境兼容, dnxcore50uap10.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/

相关文章:

c# - MySql Connector - 非阻塞套接字操作@nonQuery

c# - HLSL 和 XNA : How do I get the position and color of surrounding pixels of the current pixel shader iteration?

c# - 如何正确使用 HttpClient PostAsync 参数?

c++ - 跨平台键盘/鼠标输入推荐

c# - 集成python和c#

c# - ASP.NET 刷新 UpdatePanel OnClientClick

c++ - 将数字(金额)转换为文字的免费跨平台库?

haskell - Haskell 算术模式合法吗?

c# - 从 .NET 探查器访问 ThreadStatic 字段

c# - 缺少程序集时,.NET 应用程序静默无法启动