使用 C#、.NET Core 3 和 GTK# 进行跨平台编程(和替代方案)

Using C#, .NET Core 3 and GTK# for cross-platform Programming (and alternatives)

我即将开始开发一个软件项目,如果可能的话,应该 Linux 和 Windows 运行。因为我已经有一些使用 C# 的经验,所以我很想在这个项目中使用它。我认为对于 .NET Core 3 和 GTK# 3.22 这应该不是问题,因为 .NET Core 应用程序应该是开箱即用的跨平台。 GTK# - 根据我的理解 - 应该在任何地方都可以工作 GTK+ 也可以使用相同版本。

为什么选择 C#?好吧,我只是喜欢这种语言,而且我想使用一个适用于 c# 的 ECS 框架。

到目前为止,我已经在 Visual Studio 中针对 .NET Core 3 设置了一个测试控制台应用程序项目,并添加了一个 GTK# specific NuGet package

我写了一个简单的 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

在寻找解决方案时,我安装了单声道和 GTK# for Windows from this page。如果我坚持使用 .NET Core,我认为单声道部分应该不是必需的。

我错过了什么?我究竟做错了什么?我正在努力实现的目标是否有可能像我想象的那样?我还对如何使用 C# 编写跨平台 GUI 软件的一些替代方法感兴趣。我偶然发现了 electron.js,但我听说它有一些很大的内存开销,我并不是很喜欢 javascript。 AvaloniaUI 听起来很有趣,但我认为上述方法会更好。

编辑:按照建议 here in step 3 添加 msys 路径后,我在上面的异常之前收到以下错误。错误指出在 dll 中找不到过程入口点。

我知道这是一个老问题,但 Google 喜欢它。 我遇到过类似的问题。有很多指南很容易 google 但很难使它们发挥作用。这是截至 2022 年 4 月对我有帮助的 guide

第 1 步:安装 MSYS2 下载 MSYS2 安装程序并按照 installation instructions.

第二步:安装GTK+3打开一个MSYS2shell,然后运行:pacman -S mingw-w64-x86_64-gtk3

第 3 步:修改 PATH 变量以便可以找到库

Open up Control Panel
Go to System and Security > System
Click on the Advanced system settings link
Click on Environment Variables... button
Under System variables find the Path variable and select it
Click the Edit button
Add either ;C:\msys64\mingw64\bin or ;C:\msys32\mingw32\bin to the end of the variable, depending on your system architecture
Click OK, and you are done
Restart your system for the changes to apply

对于 运行 GtkSharp 示例项目,您还需要: pacman -S mingw-w64-x86_64-gtksourceview4 否则抛出 ...System.DllNotFoundException: GtkSource: libgtksourceview-4-0.dll...

然后您可以从 here 或 nuget 安装 GtkSharp。