Ubuntu で dotnet --info を実行した際の「A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist」エラーの解決方法
問題の説明
Ubuntu 22.04 で dotnet --info
や dotnet --version
を実行した際に、次のエラーが発生することがあります:
A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist
このエラーは主に以下の原因で発生します:
パッケージソースの混在: Microsoft 公式リポジトリと Ubuntu 公式リポジトリ両方から .NET パッケージが混在してインストールされた場合
不完全なインストール: 必要なコンポーネントが正しくインストールされていない
古いパッケージの残骸: 以前のバージョンの .NET が正常にアンインストールされずに残っている
現在の状況(2024年)
.NET 9 以降では、Microsoft が公式リポジトリ提供を縮小し、Ubuntu 公式パッケージの使用が推奨されています。以下の解決方法は互換性と将来性を考慮したアプローチです。
解決方法:3つの選択肢
選択肢 1: Ubuntu 公式パッケージを使用する(推奨)
- 既存の .NET 関連パッケージをすべて削除:
sudo apt remove dotnet* aspnetcore* netstandard*
- Microsoft リポジトリ設定を削除:
sudo rm -f /etc/apt/sources.list.d/microsoft*
sudo rm -f /etc/apt/sources.list.d/mssql-release.list
- パッケージリストを更新:
sudo apt update
- Ubuntu 公式リポジトリからインストール:
sudo apt install dotnet-sdk-8.0 # バージョンを指定
- 動作確認:
dotnet --info
dotnet --version
選択肢 2: Microsoft リポジトリを優先的に使用(Ubuntu パッケージとの共存)
- すべての .NET パッケージを削除:
sudo apt remove dotnet* aspnetcore* netstandard*
- APT 設定ファイルを作成:
Package: dotnet* aspnet* netstandard*
Pin: origin "archive.ubuntu.com"
Pin-Priority: -10
Package: dotnet* aspnet* netstandard*
Pin: origin "security.ubuntu.com"
Pin-Priority: -10
- パッケージリストを更新:
sudo apt update
- Microsoft SDK をインストール:
sudo apt install -y dotnet-sdk-8.0
注意事項
この方法では Ubuntu 公式パッケージは優先度を下げて使用されます。他の Microsoft 製品(PowerShell など)との共存が必要な場合に適しています。
選択肢 3: Snap パッケージを使用
- 既存パッケージをすべて削除:
sudo apt purge dotnet* aspnetcore* netstandard*
sudo rm -f /etc/apt/sources.list.d/microsoft*
- Snap でインストール:
sudo snap install dotnet-sdk --classic
- 環境変数を追加(
~/.bashrc
または~/.zshrc
に追記):
export PATH="/snap/bin:$PATH"
export DOTNET_ROOT=/snap/dotnet-sdk/current
- 設定を反映:
source ~/.bashrc # または source ~/.zshrc
macOS ユーザー向け補足
MacPorts を使用している場合の解決策:
sudo port install dotnet-cli
sudo port install dotnet-runtime-8 # バージョンを適宜変更
sudo port install dotnet-sdk-8 # 3つ全て必要
追加トラブルシューティング
パッケージ依存関係の更新:
bashsudo apt upgrade sudo apt --fix-broken install
ワークロードの更新:
bashdotnet workload update
インストール済み SDK の確認:
bashdotnet --list-sdks
エラーが続く場合
以下のフォルダを手動で削除します(最終手段):
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/bin/dotnet
その後、必要なインストール方法を再実行してください。