对.NET Standard与.NET Core“界面与实现”的解释感到困惑

时间:2017-09-19 08:13:18

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

上下文

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

问题

如果我在Visual Studio中创建.NET Standard类lib并添加一些引用并进行编译,那么该特定的编译程序集必须引用特定平台中的具体特定程序集。但是这种方式这个程序集绑定到该平台,这没有任何意义。

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

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

想念我的东西?

1 个答案:

答案 0 :(得分:8)

所有程序集都是根据一组引用程序集编译的。对于所有项目类型都是如此,包括.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代码。

任何"符合的平台"然后,.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应用程序的兼容性垫片(参见{{3}解释)。

还有一些工具可以实际允许.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程序集。