少し前からmacOS 26.2+.NET 10の環境でdotnet workloadコマンドが動かなくて困っていました。repairコマンドを実行してもダメ。さすがに困ってきたので、直してもらった記録。
3行まとめ
- sdk-manifests / metadata/workloads / packs をリセットして再構築した
- VS Code(C# Dev Kit)は dotnet を自前で管理している(既定の動作)ので、 .NET Install Tool の existingDotnetPath で dotnet を固定
- Prune data エラー直すために SDK の再インストール
前提として私はHomebrewで.NET SDKをインストールしています。
現象
Workload が壊れて dotnet restore 以前にエラーが出ていました。
dotnet workload list
# -> Unhandled exception:
# Workload manifest microsoft.net.workload.emscripten.current ...
# was not installed.
dotnet workload repair を実行しても同じメッセージが出て直らない、という状態です。
いろいろ削除
# Workload の manifests を削除
sudo rm -rf /usr/local/share/dotnet/sdk-manifests
# Workload の状態(メタデータ)を削除
sudo rm -rf /usr/local/share/dotnet/metadata/workloads
# 展開済み pack を削除(確実に掃除)
sudo rm -rf /usr/local/share/dotnet/packs
# ユーザー側にもあれば削除(無くてもOK)
rm -rf ~/.dotnet/metadata/workloads 2>/dev/null || true
rm -rf ~/.dotnet/sdk-manifests 2>/dev/null || true
workloadが格納されているフォルダーをきれいさっぱり削除してから再構築。
sudo dotnet workload clean
sudo dotnet workload update --from-previous-sdk
sudo dotnet workload repair
これで`dotnet workload```コマンドがエラーにならなくなりました。次はVS Codeです。
VS Codeで.NETのプロジェクトを開くとこんな意味のエラーが出ます。
- Microsoft.NET.SDK.WorkloadAutoImportPropsLocator を解決できない
- 古い Workload version を参照して emscripten.current が無いと言う
[error] プロジェクト '/Users/(略)/tests/Tests.csproj' を読み込めませんでした。
One or more errors occurred. (SDK リゾルバー エラー:
"SDK "Microsoft.NET.SDK.WorkloadAutoImportPropsLocator" を解決しようとしているときに、SDK リゾルバー "Microsoft.DotNet.MSBuildWorkloadSdkResolver" に失敗しました。
例外: "System.IO.FileNotFoundException: ワークロード バージョン 10.0.100.1 のワークロード マニフェスト microsoft.net.workload.emscripten.current: 10.0.100/10.0.100 がインストールされませんでした。
"dotnet workload repair" を実行すると、これを解決できる場合があります。
VS Code(Insiders)の Settings (JSON) を開いて、以下を追加します。
{
"dotnetAcquisitionExtension.existingDotnetPath": [
{ "extensionId": "ms-dotnettools.csharp", "path": "<DOTNET_ROOT>/dotnet" },
{ "extensionId": "ms-dotnettools.csdevkit", "path": "<DOTNET_ROOT>/dotnet" },
{ "extensionId": "ms-dotnettools.vscode-dotnet-runtime", "path": "<DOTNET_ROOT>/dotnet" }
],
"dotnet.autoSdkDownload": false
}
<DOTNET_ROOT>にはdotnetコマンドのフォルダーを指定してください。設定後、VS Codeを再起動すれば読み込めるはずです。キャッシュが残っている場合は消しておくとより安全です。
rm -rf "$HOME/Library/Application Support/Code - Insiders/User/globalStorage/ms-dotnettools.vscode-dotnet-runtime"
rm -rf "$HOME/Library/Application Support/Code - Insiders/User/globalStorage/ms-dotnettools.csdevkit"
rm -rf "$HOME/Library/Application Support/Code - Insiders/User/globalStorage/ms-dotnettools.csharp"
prune package dataが見つからない問題を直す
(<REPO>/<PROJECT>.csproj): パッケージの排除データが見つかりません。.NETCoreApp 10.0 Microsoft.NETCore.App
(<REPO>/<PROJECT>.csproj): パッケージの排除データが見つかりません。.NETCoreApp 10.0 Microsoft.AspNetCore.App
このエラーを無視するには、AllowMissingPrunePackageData を true に設定してください。
参照パッケージが正しく入っていないときにこのエラーになるそうです。
面倒なので、homebrewのパッケージを再インストールしました。
brew reinstall --cask dotnet-sdk
おわりに
昔はこういうトラブル起きると、エラーログ使っていろんなサイト検索して一つずつ解決していましたが、生成AIのおかげで一発でまとめてくれて助かりますね…。