【发布时间】: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