Skip to content

Ubuntu で dotnet --info を実行した際の「A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist」エラーの解決方法

問題の説明

Ubuntu 22.04 で dotnet --infodotnet --version を実行した際に、次のエラーが発生することがあります:

A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist

このエラーは主に以下の原因で発生します:

  1. パッケージソースの混在: Microsoft 公式リポジトリと Ubuntu 公式リポジトリ両方から .NET パッケージが混在してインストールされた場合

  2. 不完全なインストール: 必要なコンポーネントが正しくインストールされていない

  3. 古いパッケージの残骸: 以前のバージョンの .NET が正常にアンインストールされずに残っている

現在の状況(2024年)

.NET 9 以降では、Microsoft が公式リポジトリ提供を縮小し、Ubuntu 公式パッケージの使用が推奨されています。以下の解決方法は互換性と将来性を考慮したアプローチです。

解決方法:3つの選択肢

選択肢 1: Ubuntu 公式パッケージを使用する(推奨)

  1. 既存の .NET 関連パッケージをすべて削除:
bash
sudo apt remove dotnet* aspnetcore* netstandard*
  1. Microsoft リポジトリ設定を削除:
bash
sudo rm -f /etc/apt/sources.list.d/microsoft*
sudo rm -f /etc/apt/sources.list.d/mssql-release.list
  1. パッケージリストを更新:
bash
sudo apt update
  1. Ubuntu 公式リポジトリからインストール:
bash
sudo apt install dotnet-sdk-8.0  # バージョンを指定
  1. 動作確認:
bash
dotnet --info
dotnet --version

選択肢 2: Microsoft リポジトリを優先的に使用(Ubuntu パッケージとの共存)

  1. すべての .NET パッケージを削除:
bash
sudo apt remove dotnet* aspnetcore* netstandard*
  1. APT 設定ファイルを作成:
bash
Package: dotnet* aspnet* netstandard*
Pin: origin "archive.ubuntu.com"
Pin-Priority: -10

Package: dotnet* aspnet* netstandard*
Pin: origin "security.ubuntu.com"
Pin-Priority: -10
  1. パッケージリストを更新:
bash
sudo apt update
  1. Microsoft SDK をインストール:
bash
sudo apt install -y dotnet-sdk-8.0

注意事項

この方法では Ubuntu 公式パッケージは優先度を下げて使用されます。他の Microsoft 製品(PowerShell など)との共存が必要な場合に適しています。

選択肢 3: Snap パッケージを使用

  1. 既存パッケージをすべて削除:
bash
sudo apt purge dotnet* aspnetcore* netstandard*
sudo rm -f /etc/apt/sources.list.d/microsoft*
  1. Snap でインストール:
bash
sudo snap install dotnet-sdk --classic
  1. 環境変数を追加(~/.bashrc または ~/.zshrc に追記):
bash
export PATH="/snap/bin:$PATH"
export DOTNET_ROOT=/snap/dotnet-sdk/current
  1. 設定を反映:
bash
source ~/.bashrc  # または source ~/.zshrc

macOS ユーザー向け補足

MacPorts を使用している場合の解決策:

bash
sudo port install dotnet-cli
sudo port install dotnet-runtime-8  # バージョンを適宜変更
sudo port install dotnet-sdk-8      # 3つ全て必要

追加トラブルシューティング

  • パッケージ依存関係の更新

    bash
    sudo apt upgrade
    sudo apt --fix-broken install
  • ワークロードの更新

    bash
    dotnet workload update
  • インストール済み SDK の確認

    bash
    dotnet --list-sdks

エラーが続く場合

以下のフォルダを手動で削除します(最終手段):

bash
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/bin/dotnet

その後、必要なインストール方法を再実行してください。

参考情報