上下文
虽然我知道.NET Standard是一个规范。我也理解平台(如.Core或Xamarin或UWP)符合(“实现”,“支持”)选择的.NET标准版本1.4或1.6。我也了解.NET标准版本的兼容性顺序。
问题
如果我在Visual Studio中创建.NET Standard类lib并添加一些引用并进行编译,那么该特定的编译程序集必须引用特定平台中的具体特定程序集。但是这种方式这个程序集绑定到该平台,这没有任何意义。
所以必须有一个不那么难的“引用”元数据,这个编译程序集的引用必须满足不同的程序集(具有相同的强名称?) 在不同的平台实现中,我的程序集即将运行。
在所有阴天的解释中我真正想念的是:这在实践中如何运作?理论和类比似乎很清楚。
想念我的东西?
答案 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程序集。