【问题标题】:What’s the difference between NETStandard.Library package and Microsoft.NETCore.App packages?NETStandard.Library 包和 Microsoft.NETCore.App 包有什么区别?
【发布时间】:2021-03-23 10:36:13
【问题描述】:
【问题讨论】:
标签:
c#
.net-core
package
.net-standard
【解决方案1】:
.net 标准
托管框架的每个实现都有自己的一组基类库。基类库 (BCL) 包含异常处理、字符串、XML、I/O、网络和集合等类。
.NET Standard 是实现 BCL 的规范。由于 .NET 实现需要遵循此标准,因此应用程序开发人员不必担心每个托管框架实现的 BCL 版本不同。
WPF、WCF 和 ASP.NET 等框架类库 (FCL) 不是 BCL 的一部分,因此不包含在 .NET Standard 中。
.NET Standard 与 .NET 实现之间的关系与 HTML 规范与浏览器之间的关系相同。第二个是第一个的实现。
因此,.NET Framework、Xamarin 和 .NET Core 各自在其托管框架中为 BCL 实现 .NET Standard。由于计算机行业将继续引入新的硬件和操作系统,因此将会有新的 .NET 托管框架。该标准允许应用程序开发人员知道他们可以依赖一组一致的 API。
每个 .NET 版本都有一个关联的 .NET Standard 版本。
.NET Core 是托管框架的免费、跨平台、开源实现。它支持四种类型的应用程序:控制台、ASP.NET Core、云和通用 Windows 平台 (UWP)。 Windows 窗体和 Windows Presentation Foundation (WPF) 不是 .NET Core 的一部分。
从技术上讲,.NET Core 仅支持控制台应用程序。 ASP.NET Core 和 UWP 是构建在 .NET Core 之上的应用程序模型。
与 .NET Framework 不同,.NET Core 不被视为 Windows 组件。因此,更新以 NuGet 包的形式提供,而不是通过 Windows 更新。由于 .NET Core 运行时是 App-Local 安装的,并且应用程序是通过包管理器更新的,因此应用程序可以与特定的 .NET Core 版本相关联并单独更新。
欲了解更多信息,请访问https://www.infoq.com/news/2017/10/dotnet-core-standard-difference/
【解决方案2】:
过于简单,但可以将 .NET Standard 视为在任何可运行 .NET 的平台上运行的库。这意味着它可以在 Linux、Mac、Windows 等平台上运行。.NET Core 是“框架”的简约版本,因此您可以让您的应用程序尽可能小,并且只添加您需要的内容。核心仅表示应用运行所绝对需要的核心功能。
为什么标准和核心不同?这主要是因为 .NET 在其他平台上的功能是由微软以外的其他人开始开源的。因此,这些功能落后于 .NET。其他平台上的 .NET“框架”的名称是 Mono。在某些方面,.NET Core 可能会很好地取代标准,但某些东西必须达到相同的水平。
我想有些纯粹主义者会不同意我的过于简单化,但这是了解图书馆的一种简单方法。
至于两者之间的具体区别(或“标准中缺少的内容等同于核心”) - 我不确定。我相信它可以被查到。在许多情况下,我发现 Core 工作正常,例如 dockerizing 应用程序(是的,我使用了“dockerizing”这个词,但意思是在 Docker 容器中运行)。问题是当您运行一些无法在“Mono”中处理的包时。
当涉及到您添加到标准或核心(Nuget 任何人?)的包时,其中有一个区别是处理具有无法在标准中运行的功能。