c# - .NET Standard 2.0项目中为什么可以添加.NET framework项目作为引用?

标签 c# .net asp.net-core .net-core .net-standard

在将 .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/

相关文章:

c# - 并非所有代码路径都返回值

C# WinForm 不关闭。

c# - 连接超时已过期。登录后阶段超时时间已过

c# - 是否可以读取锁定文件?

.net - Ajax 调用超出可接受的 URI 长度

entity-framework - EntityFrameworkCore 相当一个 dbcontext 或者应该在 .Net Core 中分离 DbContext 像有界上下文以获得性能

c# - Asp.net core WEB API 安全的第三方中间件路由?

c# - Qt 4.7 QRegExp 电子邮件地址验证

c# - ObservableCollection 获取 SelectionChanged 上的项目

c# - ASP.Net Core 401 中的 SignalR 未经授权