.NET Framework DLL 和 .NET Core DLL 有什么区别?为什么他们需要单独的运行时?
What is the difference between a .NET framework DLL and a .NET core DLL? Why do they need seperate runtimes?
使用 ildasm 检查 .NET Core DLL 和 .NET Framework DLL 时,它们看起来非常相似。我能看到的唯一区别是引用(.NET Framework DLL 引用 mscorlib)。
这是有道理的,因为两者都必须符合 ECMA-335。但是,我不明白 运行time 在第一次加载 DLL 时如何知道使用 .NET Core 运行time 或 .NET framework 运行time。我也没有真正看到 .NET Framework 无法 运行 .NET Core DLL => 的任何原因,只要它能找到引用,它们就必须都是 ECMA-335 DLL。
没有真正的区别,这就是为什么针对 .NET Standard 编译的库可以 运行 运行 次。
区别主要在于.NET Core库认为System.String来自System.Runtime,而.NET Framework库认为它来自mscorlib。使用适当的 type-forward shim 程序集,两个 运行 次都可以 运行 为另一个编译的库...直到他们得到 MissingMethodException 或 TypeNotFoundException 因为库使用了仅在一个上可用的东西运行 次(.NET Core 中的新方法,或 .NET Core 中遗漏的方法存在于 .NET Framework 中)。
运行时间差异更微妙:
- .NET Core 每个进程没有多个 AppDomains
- .NET Core 在 运行 时间内将 System.Span 作为特殊类型以获得更好的性能
- .NET Framework 有一个用于 4.0 到 4.8 的 GAC
- .NET Core 为每个补丁版本维护共享框架的单独副本(针对 app-specific 版本锁定)
- .NET Framework GAC 获胜
- .NET Core app-local 文件胜出
- .NET Core 不再使用 CAS/部分信任
- 等等
使用 ildasm 检查 .NET Core DLL 和 .NET Framework DLL 时,它们看起来非常相似。我能看到的唯一区别是引用(.NET Framework DLL 引用 mscorlib)。
这是有道理的,因为两者都必须符合 ECMA-335。但是,我不明白 运行time 在第一次加载 DLL 时如何知道使用 .NET Core 运行time 或 .NET framework 运行time。我也没有真正看到 .NET Framework 无法 运行 .NET Core DLL => 的任何原因,只要它能找到引用,它们就必须都是 ECMA-335 DLL。
没有真正的区别,这就是为什么针对 .NET Standard 编译的库可以 运行 运行 次。
区别主要在于.NET Core库认为System.String来自System.Runtime,而.NET Framework库认为它来自mscorlib。使用适当的 type-forward shim 程序集,两个 运行 次都可以 运行 为另一个编译的库...直到他们得到 MissingMethodException 或 TypeNotFoundException 因为库使用了仅在一个上可用的东西运行 次(.NET Core 中的新方法,或 .NET Core 中遗漏的方法存在于 .NET Framework 中)。
运行时间差异更微妙:
- .NET Core 每个进程没有多个 AppDomains
- .NET Core 在 运行 时间内将 System.Span 作为特殊类型以获得更好的性能
- .NET Framework 有一个用于 4.0 到 4.8 的 GAC
- .NET Core 为每个补丁版本维护共享框架的单独副本(针对 app-specific 版本锁定)
- .NET Framework GAC 获胜
- .NET Core app-local 文件胜出
- .NET Core 不再使用 CAS/部分信任
- 等等