【问题标题】:.NET Core 2.2 Assembly System.Windows.Forms missing.NET Core 2.2 程序集 System.Windows.Forms 缺失
【发布时间】: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 就好了。

标签: c# .net .net-core


【解决方案1】:

.NET Core 没有 Windows 窗体(或 WPF)。

你想要的都是不可能的

(但在下一个主要版本中定义的 .NET Core 子集可能是可能的)

如果您列出您的要求,也许人们可以建议另一种方法来实现它,但它不会是 Windows 窗体。

【讨论】:

  • 我不认为 OP 想要运行 WinForms,它显然是一个 ASP.NET Core 项目。一些不起眼的组件仍然想使用 Windows.Forms 中的某些东西,比如 ColorRect
  • 那你为什么接受这个答案?这发送了错误的信息。
【解决方案2】:

目前 .NET core 不支持 Windows.Forms。

您可以参考answer 了解在 .NET 核心中创建 GUI 的替代方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2017-03-06
    • 2021-04-03
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多