Использование C #, .NET Core 3 и GTK # для кроссплатформенного программирования (и альтернативы) - PullRequest
0 голосов
/ 26 сентября 2019

Я собираюсь начать разработку программного проекта, который должен работать в 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.

enter image description here

...