Linux 上で見つからないファイルに関連する .NET エラーのトラブルシューティング
Linux で .NET を使用しようとすると、dotnet new
や dotnet run
などのコマンドが失敗し、fxr、libhostfxr.so、FrameworkList.xml などのファイルが見つからないことに関連するメッセージが表示されることがあります。 エラー メッセージには次のようなものがあります。
System.IO.FileNotFoundException
System.IO.FileNotFoundException: ファイル '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml' が見つかりませんでした。
致命的なエラーが発生しました。
致命的なエラーが発生しました。 必要なライブラリ libhostfxr.so が見つかりませんでした。
または
致命的なエラーが発生しました。 フォルダー [/usr/share/dotnet/host/fxr] が存在しません。
または
致命的なエラーが発生しました。フォルダー [/usr/share/dotnet/host/fxr] にバージョン番号付きの子フォルダーが含まれていません。
見つからない dotnet に関する一般的なメッセージ
SDK が見つからないこと、またはパッケージが既にインストールされていることを示す一般的なメッセージが表示される場合があります。
これらの問題の 1 つの症状は、/usr/lib64/dotnet
と /usr/share/dotnet
の両方のフォルダーがシステム上にあるということです。
ヒント
dotnet --info
コマンドを使用して、インストールされている SDK とランタイムを一覧表示します。 詳細については、.NET が既にインストールされていることを確認する方法に関するページを参照してください。
何が起こっているのでしょうか
重要
.NET 9 (現在プレビュー段階) 以降、Microsoft は、独自のパッケージを発行しない、サポートされている Linux ディストリビューションのパッケージのみを発行します。 詳細については、「Linux に .NET をインストールする」を参照してください。
これらのエラーは通常、2 つの Linux パッケージ リポジトリにより .NET パッケージが提供されている場合に発生します。 Microsoft では、ソースの .NET パッケージに Linux パッケージ リポジトリを提供していますが、一部の Linux ディストリビューションも .NET パッケージを提供しています。 これらのディストリビューションには、次のものがあります。
- Alpine Linux
- Arch
- CentOS Stream
- Fedora
- RHEL
- Ubuntu 22.04+
2 つの異なるソースから .NET パッケージを組み合わせる場合は、問題が発生する可能性があります。 パッケージが異なるパスに配置され、異なる方法でコンパイルされる場合があります。
ソリューション
これらの問題を解決するには、1 つのパッケージ リポジトリの .NET を使用します。 選択するリポジトリとその実行方法は、ユースケースと Linux ディストリビューションによって異なります。
Linux ディストリビューションに .NET パッケージが用意されており、それを使用する必要があります
PowerShell や MSSQL などの他のパッケージに Microsoft リポジトリを使用しますか?
はい
Microsoft リポジトリの .NET パッケージを無視するようにパッケージ マネージャーを構成します。 両方のリポジトリから .NET をインストールしている可能性があるため、いずれかを選択する必要があります。
既存の .NET パッケージをディストリビューションから削除します。 最初からやり直し、間違ったリポジトリからインストールしないようにする必要があります。
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
.NET パッケージを無視するように Microsoft リポジトリを構成します。
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/microsoft-prod.repo
ディストリビューションのパッケージ フィードから .NET を再インストールします。 詳細については、「Linux に .NET をインストールする」を参照してください。
No
既存の .NET パッケージをディストリビューションから削除します。 最初からやり直し、間違ったリポジトリからインストールしないようにする必要があります。
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
ディストリビューションから Microsoft リポジトリ フィードを削除します。
sudo dnf remove packages-microsoft-prod
ディストリビューションのパッケージ フィードから .NET を再インストールします。 詳細については、「Linux に .NET をインストールする」を参照してください。
PowerShell や MSSQL などの他のパッケージに Microsoft リポジトリを使用しますか?
はい
Microsoft リポジトリの .NET パッケージを無視するようにパッケージ マネージャーを構成します。 両方のリポジトリから .NET をインストールしている可能性があるため、いずれかを選択する必要があります。
既存の .NET パッケージをディストリビューションから削除します。 最初からやり直し、間違ったリポジトリからインストールしないようにする必要があります。
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
まだ存在しない場合は
/etc/apt/preferences
を作成します。touch /etc/apt/preferences
エディターで
/etc/apt/preferences
を開き、次の設定を追加します。これにより、dotnet
、aspnetcore
、またはnetstandard
で始まるパッケージが Microsoft リポジトリから取得されなくなります。Package: dotnet* aspnet* netstandard* Pin: origin "packages.microsoft.com" Pin-Priority: -10
ディストリビューションのパッケージ フィードから .NET を再インストールします。 詳細については、「Linux に .NET をインストールする」を参照してください。
No
既存の .NET パッケージをディストリビューションから削除します。 最初からやり直し、間違ったリポジトリからインストールしないようにする必要があります。
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
ディストリビューションから Microsoft リポジトリ フィードを削除します。
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt update
ディストリビューションのパッケージ フィードから .NET を再インストールします。 詳細については、「Linux に .NET をインストールする」を参照してください。
Linux ディストリビューションで提供されていないバージョンの .NET が必要です
ディストリビューションのリポジトリの .NET パッケージを無視するようにパッケージ マネージャーを構成します。 両方のリポジトリから .NET をインストールしている可能性があるため、いずれかを選択する必要があります。
既存の .NET パッケージをディストリビューションから削除します。 最初からやり直し、間違ったリポジトリからインストールしないようにする必要があります。
sudo dnf remove 'dotnet*' 'aspnet*' 'netstandard*'
.NET パッケージを無視するように Linux リポジトリを構成します。
echo 'excludepkgs=dotnet*,aspnet*,netstandard*' | sudo tee -a /etc/yum.repos.d/<your-package-source>.repo
<your-package-source>
をディストリビューションのパッケージ ソースに置き換えてください。ディストリビューションのパッケージ フィードから .NET を再インストールします。 詳細については、「Linux に .NET をインストールする」を参照してください。
ディストリビューションのリポジトリの .NET パッケージを無視するようにパッケージ マネージャーを構成します。 両方のリポジトリから .NET をインストールしている可能性があるため、いずれかを選択する必要があります。
既存の .NET パッケージをディストリビューションから削除します。 最初からやり直し、間違ったリポジトリからインストールしないようにする必要があります。
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
まだ存在しない場合は
/etc/apt/preferences
を作成します。touch /etc/apt/preferences
/etc/apt/preferences
をエディターで開き、apt preferences fragement を追加して、dotnet
、aspnetcore
またはnetstandard
で始まるパッケージがディストリビューションのリポジトリをソースにしないようにします。Package: dotnet* aspnet* netstandard* Pin: origin "<your-package-source>" Pin-Priority: -10
<your-package-source>
をディストリビューションのパッケージ ソースに置き換えてください。ディストリビューションには複数のパッケージ ソースが含まれる場合があります。
たとえば、米国の Ubuntu では、
archive.ubuntu.com
のフラグメントとsecurity.ubuntu.com
のフラグメントを1つずつ使用しなければならない場合があります。 次のように、各フラグメントを空白行で区切ってください。Package: dotnet* aspnet* netstandard* Pin: origin "archive.ubuntu.com" Pin-Priority: -10 Package: dotnet* aspnet* netstandard* Pin: origin "security.ubuntu.com" Pin-Priority: -10
ヒント
apt-cache policy
コマンドを使用してソースを見つけます。apt-cache policy '?name(dotnet.*)' | grep -v microsoft | grep '/ubuntu' | cut -d"/" -f3 | sort -u
ヒント
Ubuntu の .NET バックポート パッケージ リポジトリを登録した場合は、含まれている .NET パッケージを無視するようにパッケージ マネージャーを構成するのではなく、Ubuntu の .NET バックポート パッケージ リポジトリ の登録を解除する必要があります。 それ以外の場合、リポジトリには .NET パッケージのみが含まれるため、パッケージ マネージャーはこのリポジトリからパッケージ インデックスをプルして無視します。 これにより、
apt update
を呼び出すたびにローカル パッケージ インデックスの更新が実質的に遅くなります。apt-cache policy
コマンドを使用して、Ubuntu の .NET バックポート パッケージ リポジトリを登録したかどうかを確認します。apt-cache policy '?name(dotnet.*)' | grep 'ppa.launchpadcontent.net/dotnet/backports' | sort -u
Microsoft パッケージ フィードから .NET を再インストールします。 詳細については、「Linux に .NET をインストールする」を参照してください。 Ubuntu を使用している場合は、「Ubuntu ディストリビューションに必要な .NET バージョンが含まれていないか、サポート対象外の .NET バージョンが必要です」を参照してください。
オンライン リファレンス
他の多くのユーザーがこれらの問題を報告しています。 これらの問題の一覧を次に示します。 これらに目を通せば、発生している可能性のあることに関する分析情報が得られます。
System.IO.FileNotFoundException および '/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/5.0.0/data/FrameworkList.xml'
致命的なエラー: libhostfxr.so が見つかりませんでした
致命的なエラー: フォルダー /host/fxr が存在しません
致命的なエラー: フォルダー /host/fxr にバージョン番号付きの子フォルダーが含まれていません
明確なメッセージのない一般的なエラー
関連項目
.NET