0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bottlesで.NET Framework 4.8が動かない件

Posted at

はじめに

思いつきでLinux環境に自作Windowsアプリを使ってみようとしたら動きませんでした。
本記事ではこの解決方法を記します。

いきさつ

どうやらBottlesというwine用の仮想環境があるようです。
venvのように環境ごとにパスが存在しており、一つのOS上に複数の環境を作ることができます。
せっかくなので使ってみたのですがなぜか動きません。
Linux+wine, macOS+wineでは動いたアプリだったので確実にBottlesが原因です。

結論

  • 仮想環境作成時に存在するMonoと、手動でインストールした.NET Framework 4.8が干渉していた
    • ランナーはsys-wine-10.0を選ぶ
    • 仮想環境からMonoをアンインストールする
    • そして.NET Framework 4.8をインストールする
  • 実はエラーメッセージはデバッガのウインドウに出ている
    • デバッグウィンドウはユーザが操作しない限り表示されない
    • いつの間にかデバッガが使えなくなってしまった(Bottlesの自動アップデートのせい?)

※Bottelsのインストール方法は紹介しません。

前提条件

  • CPU: x86_64
  • OS: Ubuntu 24.04.2 LTS Desktop
  • 実行環境: Bottles 51.21

動かない

実際のアプリは載せられないので雑にテスト用のアプリを作りました。見ての通りの動作です。

using System.Windows.Forms;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            MessageBox.Show("kuso");
        }
    }
}

Windowsでは当然動作します。
image.png

Bottlesの仮想環境は下記の設定、名前以外は全部デフォルトです。
image.png

依存関係には

  • cjkfonts
  • .NET Framework 4.8

をインストールしておきます。ごく普通の構成です。

テストアプリ実行してみてもロードメッセージが出るだけで何も起きません。
image.png

エラーメッセージはデバッガに出ていたのですが、いつのまにかデバッガが起動しなくなっていました。
仮想環境の違いではないため、Bottles自身が自動アップデートして動作が変わった可能性があります。

ちゃんとしよう

動く環境を新しく作ります。ランナーをsys-wine-10.0に変えます。
image.png

システムツール類も文字化けするのでcjkfontsだけインストールします。
image.png

「レガシーwineツール」から「アンインストーラー」を表示します。
すでにMonoの類が存在しています。
下記を削除します。

  • Wine Mono Runtime
  • Wine Mono Windows Support

image.png

dotnet48をインストールします。
image.png

Bottlesから実行ファイルを開きます。
image.png

動いた。
image.png

終わりに

wineとか使わずに普通にネイティブ環境で実行したほうがいいよ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?