在将 .NET Framework 4.6.2 项目转换为 .NET Standard 项目时,我注意到我可以在 .NET Standard 项目中添加 .NET Framework 项目引用,这在理论上听起来不正确。
为什么.NET Standard 2.0项目中可以添加.NET framework项目作为引用?
最佳答案
当您有 .NET Standard 项目时,它是针对 netstandard.dll 编译的。 .NET Framework 和 .NET Core 都有 netstandard.dll(它提供到 mscorlib.dll 或 System.Runtime.dll 的类型转发)。这就是为什么您可以在 .NET Core 和 .NET Framework 中使用 .NET Standard 项目。
那么当您的 .NET Standard 项目引用 .NET Framework 项目(针对 mscorlib.dll 编译)时会发生什么?
如果您有引用链 .NET Framework -> .NET Standard -> .NET Framework 那么完全没有问题,因为在运行时您拥有具有所有必需类型的 mscorlib.dll。 p>
但是 .NET Core -> .NET Standard -> .NET Framework 引用呢?在运行时,您只有 System.Runtime.dll。 .NET Standard 项目没有问题,因为 netstandard.dll 将类型转发到 System.Runtime.dll。但诀窍在于 .NET Core 也有 mscorlib.dll!是的,它也只是类型转发到 System.Runtime.dll 类型。一切正常。 ...除非您将使用 System.Runtime.dll 中不存在的某些 .NET Framework 类型。
进一步阅读:.NET Framework 兼容性垫片
关于c# - .NET Standard 2.0项目中为什么可以添加.NET framework项目作为引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62067063/