昨日の続きです
Visual Studio 2019 の .Net Core ソリューション内のプロジェクトが全部アンロードされてビビった話
起こったこと
1、発行したアプリを起動しようとすると以下のエラーが出た
Failure processing application bundle. Bundle header version compatibility check failed A fatal error was encountered. Could not extract contents of the bundle
2、昨日適当に指定した SDK のバージョンが悪かったと当たりを付けて別のバージョンをためそうとした
3、dotnet –list-sdks コマンドによると、指定した以外の SDK のバージョンが存在していなかった
4、プログラム一覧だと存在するが、構わず再インストールをしてみたがリストに追加されなかった
原因
dotnet の path が変わっており、32bit版が呼ばれるようになっていた
自分のPCは当然64bitであり、SDK も64bit版がインストールされていた。
32bit版の dotnet からは当然32bit版の SDK しか呼ばれないためなんかの拍子にインストールされた一種類のみが表示されていた様子。
Program Files(x86)/dotnet とProgam FIles/dotnet の違いは余りにも大きい…
Windows10 64bit では 前者が32ビット用プログラム、後者が64ビット用プログラム
対策
環境変数の Path を書き換える
該当する行の(x86)を消しただけで全て解決した。
ついでに昨日追加した global.json も消したけど問題なく動作した。
関連する雑感
VS では global.json が見つからない場合は自動で最新の安定板 SDK を選択するようになっているらしい。それで Path が書き換わるまでは問題なく動作していたようだ。32ビット版 SDK はプレビュー版しかインストールされていなかったためエラーが出るようになったらしい。 global.json で明示的にしていすればプレビュー版も使用できることが逆に問題の切り分けを難しくしたような気もする。
この問題はめちゃくちゃ悩んで「dotnet SDK 消えた」とか「dotnet SDK 参照」とか「dotnet SDK 選択」とか検索しまくったけど、dotnet –list-sdks して出てこないケースについては全然情報を得られなかったのでしんどかった。
答えに気付けたきっかけは dotnet –info で表示させた情報を眺めていた時のこと、
RID: win10-x86
なる行を見つけたこと。dotnet が32bitで実行されてる?というところに気付いてからは早かった。
そもそも –list-sdks の時点で
ほにゃほにゃ プレビュー版 [C:\Program Files(x86)\dotnet\sdk]
って表示されてたので、そこで気づけてればもっと早かったかも。