Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Visual Studio Code + .NET Core + Gtk#でGUI作成

以前、monodevelopというソフトを用いてLinuxアプリケーションの作成について記載いたしました。
elsammit-beginnerblg.hatenablog.com

今回は、vscodeを用いてwindows上でGUIアプリ作成してLinuxへクロスコンパイルできないかな?
と考え調べてみたところ、
.NET Core + Gtk#
でうまくできることが分かったので環境構築を行い、試しに使ってみました。
後で調べなおすのも嫌なので備忘録で残しておきます。


Gtkとは?

C言語用のGUIツールキットになります。
GNUプロジェクトの一部であり、オープンソースとなります。
GTKは主にC言語でのツールキットになりますが、公式にて、C++用のGtk+C#用のGtkSharp(Gtk#)などがリリースされています。

今回はC#GUIアプリ作成していきたいのでGtk#を利用していきます。

Gtk使用の背景

そもそもなぜGtkを使用するのか?
最近、.Net Core5.0にてwpfwindows formが使用できるとの記事を見つけましたが、、、

Gtk#インストール方法

Gtk#をインストールするには、Msysが必要になります。
こちらからインストーラを取得して、
https://www.msys2.org/
exeファイルを実行します。
※基本的にはデフォルト設定で進めてしまって問題ないです。

インストールが完了したら、Msysを立ち上げ、
下記コマンドを実行します。

pacman -Syu
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-glade
pacman -Syu

にて最新に更新し、

pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-glade

Gtkなどに必要なパッケージをインストールしています。

■.NET Coreのインストール

今回は.NET COre5.0を利用していきたいので、こちらから
https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.100-windows-x64-installer
インストーラをダウンロードしてきて、
インストーラを実行!!

以上ですw。

Visual Studio Codeを立ち上げ、ターミナルから、

dotnet --version

を入力し、

5.0.100

といったバージョンが返ってくればOKです。

Visual Studio Codeとの連携

ではMsysをVisual Studioと連携させます。

まずMsysが格納されているフォルダ(自分はC://msys64 でした)を開き、
直下にvscode_bash.batファイルを作成します。
vscode_bash.batにはこちらを記載しておきます。

@echo off
set CHERE_INVOKING=1 set MSYSTEM=MINGW64 & Msysのパス\\usr\\bin\\bash.exe --login -i

そして、Visual Studio Codeを起動し、
「Shift」 + 「Ctrl」 + 「P」を同時押しして基本設定(settings.json)を開きます。

こちらを基本設定(settings.json)の末端に記載します。

"terminal.integrated.shell.windows":"vscode_bash.batまでのパス"

これで連携は完了です。

■実際に使ってみる

では実際に動かしてみたいと思います。

適当なフォルダを作成し、
Visual Studio Code上のターミナルにて作成したフォルダに移動します。
そして、

dotnet new --install GtkSharp.Template.CSharp
dotnet new gtkapp

を実行します。

エラーなく実行出来れば、直下に複数ファイルが生成されるかと思います。
まずデフォルト状態のままで

dot net run

を実行してこちらの画面が表示されればOKです。

次にlinux上でも動作するか確認してみます。

dotnet publish -r linux-x64

を実行します。
そして、生成されたlinux-x64をlinux環境に保存し、
linux-x64配下の実行ファイルを実行します。
windows上で動かした場合と同様の画面が表示されればOKです!!

ファイルに実行権限等が付与されていない場合もありますが、
その場合には、

sudo chown 777 -R ./

とすればOKです。

■最後に

実は当初の予定では、wpflinux上で実行出来ないかな??
というのが発端でした。

.NET Core5.0だとクロスプラットフォーム対応との情報があったため試しに実施してみましたが、、、
ダメでした。。泣

もし知っている方いましたら情報お願いします。