VisualStudio2022+AvaloniaUIでLinux/Windows用アプリ開発(環境構築)
やりたいこと
Visual Studio と C#でLinux / Windows マルチプラットフォームのDesktopアプリケーションを作りたい。
使用環境
Microsoftはマルチプラットフォーム用にMAUIを提供している。が、LinuxにはConsole Applicationのみ対応。UI周りは対応していない。そこでAvaloniaUI + VisualStudio2022を使って作ってみることにした。
Windows 11 : Home 22H2 + Visual Studio Community 2022(64bit)
Linuxテスト環境 : 上記Windows上のWSL2 Ubuntsu 22.04.2 LTS
AvaloniaUIのの導入方法
VisualStudioの「拡張機能」->「ManageExtensions」から
オンラインで検索し、「Avalonia for Visual Studio 2022」をインストールする。
プロジェクト作成 & Windows上での実行
1.VisualStdioの「新しいプロジェクトの作成」を開き、
「テンプレートを検索」から「Avalonia C# Project」を探して選択して「次へ」
2.プロジェクト名(ここでは"AvaloniaUIExample")を指定して「作成」
3.Select Target PlatForm -> Desktop, Design pattern -> Reactive UIを選択して「Create」, Add FeaturesからCompliled Bindingを追加して「Create」
※Compiled Bindingは入れてはいけない。現状いろいろ問題がある。
編集に支障があるだけではなく、動くはずのコードがコンパイルできなくなるケースがある。
4.ソリューションエクスプローラの*.Desktopプロジェクトを右クリック->スタートアッププロジェクトに設定
5.これで実行すると下記のようなアプリケーションのひな型ができる
Linux上での単体実行ファイルの作成
単体実行ファイルを作成することでLinux側に何もインストールすることなくLinux用実行ファイルを作成できる。
1.*.Desktopプロジェクトを右クリックし、「発行」をクリック。
2.公開場所->フォルダ。ターゲット->フォルダを選択。場所(フォルダパス)を入力して「完了」
3.出てきたこのタブの最下部の「すべての設定を表示」をクリック
4.プロファイル設定で配置モードを「自己完結」に設定。(これでlinuxにdotnetをインストールしなくても動くようになる)
ターゲットランタイムを「linux-x64」に設定。
ファイルの公開オプションを開き、「単一ファイルの生成」をチェック
して「保存」
※「未使用コードのトリミング」をチェックしてはいけない。チェックするとWindows/Linux環境を問わず動作しなくなるケースがある。
5.「発行」を押す。
6.下記の「フォルダを開く」を押して、そこのファイルをすべてlinux環境にコピーする
7.linux起動。該当フォルダでファイルにchmodで実行権限をつけ、*.Desktopを起動すると、以下のエラーが出る
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'libICE.so.6' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable:
8.以下のpackageをinstall
sudo apt install libice6
sudo apt install libsm6
以下を参照
9.起動成功
※Linux側の環境によってはversion GLIBCXX_*
not foundが出るケースがあった。その場合は.netのバージョンを下げると動くケースがあった。
Discussion