我即将开始开发一个软件项目,该项目应在Linux和Windows上运行(如果可能的话)。由于我已经有一些C#的经验,所以我很想在这个项目中使用它。我认为使用.NET Core 3和GTK# 3.22应该不会有问题,因为.NET Core App应该是跨平台的。据我了解,只要在同一版本下可用,GTK#应该能够在任何地方工作。
当我从Visual Studio 2019运行此代码时,我会得到
在寻找解决方案时,我安装了mono和此页面上的Windows GTK#。如果我坚持使用.NET Core,mono部分应该是不必要的。
为什么选择C#?嗯,我喜欢这种语言,并且有一个适用于C#的ECS框架,我想使用它。
到目前为止,我在Visual Studio中设置了一个测试控制台应用程序项目,针对.NET Core 3,并添加了一个GTK#特定的NuGet包。
我编写了一个简单的“Hello World”程序来测试环境。
using System;
using Gtk;
namespace GTKTest
{
class Program
{
static void Main(string[] args)
{
Application.Init();
Window win = new Window("Hello GTK");
Label lbl = new Label("This is a test GTK App written with C# for GNU/Linux and Windows");
win.DeleteEvent += Win_DeleteEvent;
win.Add(lbl);
win.ShowAll();
Application.Run();
win.Dispose();
Console.Write("Press any key...");
Console.ReadKey();
}
private static void Win_DeleteEvent(object o, DeleteEventArgs args)
{
Application.Quit();
args.RetVal = true;
}
}
}
当我从Visual Studio 2019运行此代码时,我会得到
System.TypeInitializationException
HResult=0x80131534
Message=The type initializer for 'Gtk.Application' threw an exception.
Source=GtkSharp
StackTrace:
at Gtk.Application.Init()
at GTKTest.Program.Main(String[] args) in D:\Workspace\VSRepos\C#\GTKTest\Program.cs:line 10
Inner Exception 1:
DllNotFoundException: Gtk
在寻找解决方案时,我安装了mono和此页面上的Windows GTK#。如果我坚持使用.NET Core,mono部分应该是不必要的。
我缺少什么?我做错了什么?像我想象的那样实现这一点是否可能?我还对如何使用C#编写跨平台GUI软件的一些替代方法感兴趣。我偶然发现了electron.js,但我听说它有一些很大的内存开销,而且我不太擅长javascript。AvaloniaUI听起来很有趣,但我认为上述方法会更好。
编辑:在添加msys路径后,如此处第3步骤中所建议,我得到了上面异常之前的以下错误。该错误说明在dll中找不到过程入口点。