gpt4 book ai didi

.net - 对 .NET Standard 与 .NET Core "interface vs implementation"的解释感到困惑

转载 作者:行者123 更新时间:2023-12-03 18:15:22 25 4
gpt4 key购买 nike

上下文

虽然我知道 .NET Standard 是一个规范。我也了解平台(如 .Core 或 Xamarin 或 UWP)符合(“实现”、“支持”)选择的 .NET 标准版本,例如 1.4 或 1.6。我也了解 .NET 标准版本的兼容性顺序。

问题

如果我在 Visual Studio 中创建一个 .NET Standard 类库,并添加一些引用并对其进行编译,则该特定编译程序集必须引用特定平台中的具体特定程序集。但是,通过这种方式,该程序集绑定(bind)到该平台,这是没有意义的。

所以必须有一个不那么硬的“引用”元数据,这个编译的程序集的引用必须满足不同的程序集(具有相同的强名称?)
在我的程序集即将运行的不同平台实现中。

有了所有模糊的解释,我真正想念的解释是:这在实践中是如何工作的?理论和类比似乎很清楚。

想念我什么?

最佳答案

所有程序集都针对一组引用程序集进行编译。这适用于所有项目类型,包括 .NET Standard、.NET Core 和 .NET Framework(以及其他所有项目类型。除了 .NET <=3.5,但为了简单起见,我们忽略它)。

.NET Standard 为用于编译 .NET Standard 程序集的每个版本定义了一组引用程序集。

对于 .NET Standard 2.0,最值得注意的引用程序集是 netstandard.dll .如果您引用 System.Object ,编译器将发出 IL 代码引用 [netstandard]System.Object .

任何“符合”.NET Standard 2.0 的平台都有一个实现程序集 netstandard.dll要么包含类型,要么包含类型转发定义。因此对于 .NET Framework,可以有 netstandard.dll包含转发到 [mscorlib]System.Object 的类型.另一个平台可能有不同的netstandard.dll例如转发到 [System.Runtime]System.Object .

除了netstandard.dll还有一些库支持 .NET Standard 1.0-1.6 和一些其他类型的转发 dll,它们构成了 .NET Framework 应用程序的兼容性填充程序(参见 Compatibility shim used by .NET Standard 2.0 的解释)。

还有一些工具可以实际允许在不包含这些转发程序集的平台上使用 .NET Standard 程序集。 NETStandard.Library NuGet 包包含 1.0-1.6 的这些,新的集成 MSBuild 工具为 .NET Framework 4.6.1+ 为 .NET Standard 1.5-2.0 添加了支持 DLL。 .NET Framework 4.7.1 包含所有必要的程序集,因此 .NET Framework 4.7.1 项目无需添加其他文件即可使用 .NET Standard 程序集。

关于.net - 对 .NET Standard 与 .NET Core "interface vs implementation"的解释感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com