ツールが使いづらいとかいう話ではなく、開発環境の入手が困難なのだ。

dotnet で GUI というと、ソースコードをエディタで書いて GUI アプリケーションを作ることは不可能ではないが、時代を30年ほど遡る行為だろう。既に20年は前から、このような場合は IDE を使いデザインモードも使って RAD 開発をするのが当たり前なのだから。

代わりに mono と GTK# を使う手があり、この方法での IDE としては monodevelop 一択なのだが、 ubuntu には、もうかなりの期間の間、 monodevelop のパッケージがリリースされていないため、自前でビルドする必要がある。

そこで、まず、 monodevelop の git のサイトなどを見て、下のようにすれば monodevelop のビルドができることが分かったので試した。

$ git clone https://github.com/mono/monodevelop/ --recursive

$ cd monodevelop

$ ./configure --profile=gnome

$ make

make の途中で、エラー62件で中止された。monodevelop の issue への投稿を見ると、2019年1月に、構成の冗長性を修正したというコミットがされて以降、 Linux 環境では monodevelop のビルドが通らない状態がずっと続いており、解決のめどは立っていないようだ。(どうも Linux 版はこのまま放置されそうだ。)パッケージが長期間リリースされない理由は、恐らくこのビルドが通らないことが原因だろう。

そこで、問題のコミット以前の状態まで git reset --hard コマンドでロールバックし、ビルドを通そうとしたが、 git submodule update --init --recursive を実行すると、サブモジュールとしてクローンしようとする別のプロジェクトが既に存在しないため、エラーとなり、ビルドが通らない。それだけ手動で過去のリリースからダウンロードしたとしても、ビルドの処理の一部として通らないので意味がない。

そこで、以前のリリースのソースアーカイブをダウンロードしてみたが、 make の途中で git を使う処理が入るようで、 git でクローンしたプロジェクトではないので当然エラーになってしまい、ビルドが通らない。

そこで、 wine に windows 版の monodevelop をインストールすることを考えたが、 windows 版の monodevelop はソースコードしか提供されないそうだ。

そこで、 wine に windows 版の monodevelop をビルドする環境を構築しようとしたが、それには Visual Studio 2017 のインストールが必要となることが分かった。

そこで、インストールを試みたが、 wine はインストーラを起動できず失敗することが分かった。 wine に mono がインストールされている状態では mscoree.dll を使おうとして、 mono ではだめなようで失敗するようだ。

そこで、 GUI を用いないサイレントインストールを試みたが、 GUI を用いないインストール形式でも同じエラーが出るようでだめだった。

そこで、 wine に .Net Framework をインストールしようとしたが、しばらく前の wine のバージョンから .Net Framework は動作が壊れてしまっているとのことで、 winetricks はインストールを中止してしまう。

さて、ここまであれこれ手を尽くしてあがいたが、どの方法も全て解決策が塞がれており、文字通りの八方塞がり状態だ。

他には、dotnet での GUI 開発環境として Avalonia UI や AvalonStudio もあるのだが、どちらも現状、環境が構築できない状態だ。(公式サイト通りの方法で構築しようとしても途中でエラーを起こす。)

Linux での GUI アプリケーション開発環境、どんだけ構築困難なの・・・。

この記事のリンク元 | 10 | 8 | 4 | 2 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/diary/20201129_210153852159.htm


作成したプロジェクトの <プロジェクト名>.csproj ファイルを開き、

TargetFramework タグの内容で指定する。

netcoreapp3.1・・・dotnet core 3.1 を指定する場合。

net5.0・・・ .Net 5.0 を指定する場合。

指定した dotnet のバージョンにより、C#の規定のバージョンも変化する。

dotnet core 3.x の場合、 C# 8.0

.Net 5.0 の場合、 C#9.0

が使用される。

例えば、 switch 文の case <条件式> に、' > 2' などのリレーショナルパターンを使用したい場合は、 C# 9.0 以降が必要になるため、このような場合は TargetFramework に net5.0 と指定してやるとよい。

この記事のリンク元 | 10 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/memo/20201129_024427590468.htm

キーワード: dotnet TargetFramework C#