【问题标题】:Confused about .NET Standard vs .NET Core "interface vs implementation" explanations对 .NET Standard 与 .NET Core “接口与实现”的解释感到困惑
【发布时间】:2018-02-27 22:24:45
【问题描述】:

上下文

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

问题

如果我在 Visual Studio 中创建一个 .NET Standard 类库,并添加一些引用并对其进行编译,则该特定编译程序集必须引用特定平台中的具体特定程序集。然而,这样这个程序集就绑定到那个平台,这是没有意义的。

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

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

想念什么?

【问题讨论】:

    标签: .net xamarin uwp .net-core .net-standard


    【解决方案1】:

    所有程序集都针对一组参考程序集进行编译。这适用于所有项目类型,包括 .NET Standard、.NET Core 和 .NET Framework(以及其他所有项目类型。.NET

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

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

    任何“符合” .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 程序集。

    【讨论】:

    • 谢谢。什么是“类型转发定义”或“类型转发”?那是包装类还是运行时技巧?
    • 一些宝石仍在等待探索......更有趣的是,它是相当古老的东西。到目前为止我已经错过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多