对 .NET Standard 与 .NET Core "interface vs implementation" 的解释感到困惑
Confused about .NET Standard vs .NET Core "interface vs implementation" explanations
上下文
虽然我明白 .NET Standard 是一种规范。我还了解到平台(如 .Core 或 Xamarin 或 UWP)符合("implements"、"supports")选择的 .NET 标准版本,例如 1.4 或 1.6。我也了解 .NET 标准版本兼容性顺序。
问题
如果我在 Visual Studio 中创建一个 .NET Standard class 库,并添加一些引用并对其进行编译,那么该特定编译程序集必须引用特定平台中的具体特定程序集。但是,通过这种方式将此程序集绑定到该平台,这是没有意义的。
所以必须有一个不太难的"reference"元数据,这个编译程序集的引用必须满足不同的程序集(具有相同的强名称?)
在不同的平台实现中,我的程序集即将 运行.
所有的解释都很模糊,我真的很想念解释:这在实践中是如何工作的?理论和类比似乎很清楚。
我想念什么?
所有程序集都是针对一组参考程序集编译的。这适用于所有项目类型,包括 .NET Standard、.NET Core 和 .NET Framework(以及其他一切……除了 .NET <=3.5,但为简单起见,我们忽略它)。
.NET Standard 为每个版本定义了一组参考程序集,用于编译 .NET Standard 程序集。
对于 .NET Standard 2.0,最著名的参考程序集是 netstandard.dll
。如果您引用 System.Object
,编译器将发出引用 [netstandard]System.Object
.
的 IL 代码
任何 "conforms" 到 .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 应用程序的兼容性垫片(请参阅 的解释)。
还有一些工具可以实际允许在不包含这些转发程序集的平台上使用 .NET Standard 程序集。 NETStandard.Library
NuGet 包包含适用于 1.0-1.6 的这些内容,并且新的集成 MSBuild 工具为 .NET Standard 1.5-2.0 的 .NET Framework 4.6.1+ 添加了支持 DLL。 .NET Framework 4.7.1 包含所有必需的程序集,因此 .NET Framework 4.7.1 项目无需添加其他文件即可使用 .NET Standard 程序集。
上下文
虽然我明白 .NET Standard 是一种规范。我还了解到平台(如 .Core 或 Xamarin 或 UWP)符合("implements"、"supports")选择的 .NET 标准版本,例如 1.4 或 1.6。我也了解 .NET 标准版本兼容性顺序。
问题
如果我在 Visual Studio 中创建一个 .NET Standard class 库,并添加一些引用并对其进行编译,那么该特定编译程序集必须引用特定平台中的具体特定程序集。但是,通过这种方式将此程序集绑定到该平台,这是没有意义的。
所以必须有一个不太难的"reference"元数据,这个编译程序集的引用必须满足不同的程序集(具有相同的强名称?) 在不同的平台实现中,我的程序集即将 运行.
所有的解释都很模糊,我真的很想念解释:这在实践中是如何工作的?理论和类比似乎很清楚。
我想念什么?
所有程序集都是针对一组参考程序集编译的。这适用于所有项目类型,包括 .NET Standard、.NET Core 和 .NET Framework(以及其他一切……除了 .NET <=3.5,但为简单起见,我们忽略它)。
.NET Standard 为每个版本定义了一组参考程序集,用于编译 .NET Standard 程序集。
对于 .NET Standard 2.0,最著名的参考程序集是 netstandard.dll
。如果您引用 System.Object
,编译器将发出引用 [netstandard]System.Object
.
任何 "conforms" 到 .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 应用程序的兼容性垫片(请参阅
还有一些工具可以实际允许在不包含这些转发程序集的平台上使用 .NET Standard 程序集。 NETStandard.Library
NuGet 包包含适用于 1.0-1.6 的这些内容,并且新的集成 MSBuild 工具为 .NET Standard 1.5-2.0 的 .NET Framework 4.6.1+ 添加了支持 DLL。 .NET Framework 4.7.1 包含所有必需的程序集,因此 .NET Framework 4.7.1 项目无需添加其他文件即可使用 .NET Standard 程序集。