.NET SDK がインストールされているのに認識されない問題 - Linux Ubuntu/PopOS
問題の概要
Linux UbuntuやPopOSで.NET SDKをインストールしたにもかかわらず、システムがSDKを認識せず、次のようなエラーが発生することがあります:
* You intended to execute a .NET application:
The application 'watch' does not exist.
* You intended to execute a.NET SDK command:
No .NET SDKs were found.
この問題は、パッケージの競合、パスの設定ミス、またはインストール方法の不一致によって発生します。
根本原因
この問題の主な原因は以下のいずれかです:
- 複数のインストール方法の混在:APTパッケージ、Snapパッケージ、手動インストールが混在している
- パスの不一致:DOTNET_ROOT環境変数と実際のインストールパスが一致していない
- シンボリックリンクの欠如:必要なディレクトリ間のシンボリックリンクが存在しない
- パッケージの競合:異なるリポジトリからのパッケージが競合している
解決方法
方法1: 完全再インストール(推奨)
最も確実な解決方法は、既存の.NETインストールを完全に削除してから再インストールすることです。
# すべての.NET関連パッケージを削除
sudo apt remove 'dotnet*' 'aspnetcore*' 'netstandard*'
# Snapパッケージもインストールしている場合
sudo snap remove dotnet-sdk
# 不要なパッケージを削除
sudo apt autoremove
# MicrosoftのAPTリポジトリを削除(問題の原因になる場合がある)
sudo rm /etc/apt/sources.list.d/microsoft-prod.list
sudo rm /etc/apt/sources.list.d/microsoft-prod.list.save
# パッケージリストを更新
sudo apt update
# Ubuntu公式リポジトリからインストール
sudo apt install dotnet-sdk-6.0
# または.NET 7の場合
sudo apt install dotnet-sdk-7.0
方法2: スクリプトを使用した手動インストール
APTパッケージに問題がある場合は、Microsoft公式のインストールスクリプトを使用します。
# インストールスクリプトのダウンロード
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x ./dotnet-install.sh
# システム全体で使用できる場所にインストール
sudo ./dotnet-install.sh --channel 6.0 --install-dir /opt/dotnet
# すべてのユーザーが利用できるようにパスを通す
echo 'export PATH=$PATH:/opt/dotnet' | sudo tee /etc/profile.d/dotnet.sh
sudo chmod +x /etc/profile.d/dotnet.sh
# 現在のシェルセッションでパスを更新
source /etc/profile.d/dotnet.sh
方法3: シンボリックリンクの作成
.NETは/usr/share/dotnet
にインストールされているが、システムが/usr/lib/dotnet
を探している場合があります。
# 必要なディレクトリが存在するか確認
ls -alh /usr/share/dotnet/
ls -alh /usr/lib/dotnet/
# シンボリックリンクを作成
sudo ln -sf /usr/share/dotnet/dotnet /usr/bin/dotnet
sudo ln -sf /usr/share/dotnet/sdk /usr/lib/dotnet/sdk
sudo ln -sf /usr/share/dotnet/sdk-manifests /usr/lib/dotnet/sdk-manifests
sudo ln -sf /usr/share/dotnet/templates /usr/lib/dotnet/templates
# シンボリックリンクが正しく作成されたか確認
ls -alh /usr/lib/dotnet/
方法4: 環境変数の設定
DOTNET_ROOT環境変数を明示的に設定することで問題が解決することもあります。
# 現在のシェルセッションのみ有効
export DOTNET_ROOT=/usr/share/dotnet
# .bashrcまたは.profileに追加して永続化
echo 'export DOTNET_ROOT=/usr/share/dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT' >> ~/.bashrc
# 変更を適用
source ~/.bashrc
インストールの確認
どの方法を選択した後も、正しくインストールされたことを確認してください。
# .NETの情報を表示
dotnet --info
# インストールされたSDKの一覧を表示
dotnet --list-sdks
# バージョンを確認
dotnet --version
予防策
将来この問題が発生しないようにするための予防策:
- 一貫したインストール方法の使用:APTかスクリプトかのどちらか一方を使う
- 公式リポジトリの使用:可能な限りUb公式リポジトリを使用する
- 定期メンテナンス:定期的にパッケージの更新とクリーンアップを行う
WARNING
複数のインストール方法を混在させると、パスの競合が発生しやすくなります。一つの方法に絞ってインストールすることが重要です。
トラブルシューティング
問題が解決しない場合、次のコマンドで詳細情報を収集できます:
# どのdotnetが実行されているか確認
which dotnet
# ファイルの実体を確認
ls -la $(which dotnet)
# 環境変数を確認
env | grep DOTNET
echo $PATH
まとめ
.NET SDKがインストールされているのに認識されない問題は、主にパスの問題やパッケージの競合によって発生します。完全な再インストールが最も確実な解決方法ですが、シンボリックリンクの作成や環境変数の設定でも解決できる場合があります。どの方法を選択する場合も、一貫したインストール方法を維持することが再発防止の鍵となります。