使用 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。
我即将开始开发一个软件项目,如果可能的话,应该 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。