【问题标题】:Can NET Framework 4.7.2 apps load at runtime NET Core 5.0 library DLLs?NET Framework 4.7.2 应用程序能否在运行时加载 NET Core 5.0 库 DLL?
【发布时间】:2021-04-04 20:37:55
【问题描述】:

我开始将我的一些 NET Framework 4.7.2 类库移植到 NET Core 5.0。宿主框架应用程序动态发现并在 NET Core 库上运行 Assembly.Load ok。但是当我尝试对加载的程序集执行Assembly.GetType(NET50Namespace.Classname) 操作时,它会失败并返回 null 并出现错误:

{"无法加载文件或程序集 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。系统找不到指定的文件。":"System.Runtime ,版本=5.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a"}

看起来它正在尝试加载我已经安装的 NET Core 5.0.0.0 运行时。我检查了控制台命令dotnet --list-runtimes,NETCore 和 WindowsDesktop 运行时都安装好了:

c> dotnet --list-runtimes

Microsoft.NETCore.App 5.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

我被困住了。

第一季度。 Framework 4.7.2 应用程序动态加载和运行 NETCore 5.0 DLL 是否合法/可行?作为第一步,我试图将我的应用程序的一小部分移植到 NET50。但它不起作用,我可能正在尝试做不可能的事情。

第二季度。如果框架可以加载/调用 NET50 DLL,我做错了什么,如何使 GetType 调用工作,以便实例化和调用 NET50 类库?

谢谢。

【问题讨论】:

  • 你能把类库改成 .NET Standard 吗?
  • 您不能将 .NET 5 程序集加载到 .NET Framework 进程中。
  • .NET Framework 4.7.2 应用程序最多可以加载 .NET Standard 2.0 程序集,所以我会选择它作为您的类库而不是 .NET 5 的目标。请参阅此处的完整兼容性列表- docs.microsoft.com/en-us/dotnet/standard/net-standard
  • 感谢大家的帮助。我认为我可以轻松地定位 NET Standard 2 程序集,因为我的库没有做任何特别的事情。至少这将使我能够开始将代码从 NET Framework 转移到 NET Core。我会做实验。我只是不想一次解决整个移植问题,所以我想我会先开始瞄准 NET 5.0。

标签: c# .net-core reflection


【解决方案1】:

“不”

从根本上说,这不是受支持的方案,并且 .NET Framework 和 .NET Core(本质上变成了 .NET 5)之间存在硬中断。

如果有帮助,.NET 4.7.2“有点像”支持 .NET Standard 2.0,.NET 5 也实现了(正确),所以如果你的库可以针对 .NET Standard 2.0,它可能会被加载.NET 5 和 .NET Framework 4.7.2 应用程序。您还可以使用多个 TFM 对库进行多目标定位,例如 net472net5.0(也许还有一些 netstandard,为了更好的衡量标准)

但是,老实说:继续使用 .NET Framework 只会越来越难;如果可能,您应该优先考虑迁移到更新的 .NET 版本(例如 .NET Core 3.1 或 .NET 5,在撰写本文时)。

【讨论】:

  • 感谢您的回答。你是对的,我试图通过开始移动部分而不立即破坏整个应用程序来避免“越来越难”的部分。我将尝试定位和加载 NET Standard 2 程序集,因为我的库没有做任何特别的事情。至少这将使我能够开始将代码从 NET Framework 转移到 NET Core。我会做实验。我只是不想一次解决整个移植问题,所以我只是随机选择了 NET 5.0。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2019-10-04
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多