Я собираюсь начать разработку программного проекта, который должен работать в Linux и Windows, если это возможно.Поскольку у меня уже есть некоторый опыт работы с C #, я очень хочу использовать его для этого проекта.Я предположил, что с .NET Core 3 и GTK # 3.22 это не должно быть проблемой, поскольку .NET Core App должна быть кроссплатформенной из коробки.GTK # - насколько я понимаю - должен работать везде GTK + в той же версии также доступна.
Почему c #?Ну, мне просто нравится язык, и есть ECS Framework для c #, который я хотел бы использовать.
Пока что я настроил тестовый проект консольного приложения в 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 и GTK # для Windows с этой страницы .Моно часть не должна быть необходимой, если я придерживаюсь .NET Core, я думаю.
Чего мне не хватает?Что я делаю неправильно?Является ли то, что я пытаюсь достичь, даже возможным, как я это себе представляю?Меня также интересуют некоторые альтернативы программирования кроссплатформенного GUI-программного обеспечения на C #.Я наткнулся на Electron.js, но я слышал, что у него есть большие накладные расходы памяти, и я не очень в Javascript.AvaloniaUI звучит интересно, но я подумал, что вышеприведенный подход будет лучше.
Редактировать: После добавления пути msys, как предложено здесь на шаге 3 , я получаю следующую ошибку, предшествующую исключению сверху.Ошибка гласит, что точка входа в процедуру не может быть найдена в dll.