【发布时间】:2019-03-29 22:20:31
【问题描述】:
我想将 .NET Framework 4.0 中的项目迁移到 .NET Core 2.2。但是我的程序执行出错了。
我的项目想要加载一个带有 Assembly 类的 .dll,它在 .NET Framework 4.0 上运行良好,但在 .NET Core 2.2 上运行良好。它抛出了一个异常:
System.Reflection.TargetInvocationException:调用的目标已抛出异常。 ---> System.IO.FileNotFoundException: 无法加载文件或程序集 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
using System.Reflection; // Assembly class
var pathToDll = "../../../../";
var asm = Assembly.LoadFrom(pathToDll);
var callingProgObject = asm.GetType("RandomType.CallingProg");
MethodInfo method = callingProgObject.GetMethod("MethodInDll");
var input = new InputForDll();
method.Invoke(callingProgObject, new object[] {input}); // <-------- error
我需要导入一个兼容 .NET Core 2.2 的包,类似于 .NET Framework 4.0 的System.Windows.Forms?
我的 NuGet 包安装在解决方案中:
与How to use System.Windows.Forms in .NET Core class library不重复
【问题讨论】:
-
您是否用 RandomType 和 MethodInDll 替换了实际值?因为它们在这里相当重要。你的代码的哪一部分在调用它(以及为什么)?
-
.NET Core 2.2 不支持 Winforms。不过,.NET Core 3 可能支持它。 link
-
.netcore 的主要重点是使移植到 Linux 和 macOS 变得容易。这对 Winforms 是行不通的,那些操作系统差别太大了。我还没有看到对 Mono 尝试这样做的很多赞誉。如果您需要在 .netcore 上运行的 GUI,请考虑使用 Xamarin。或者等到 .netcore 3 稳定下来,如果移植不重要,那将需要一段时间。不急,.netframework 就好了。