この問題の原因
- VSCodeの拡張機能のC#のアップデートでpublisherが変更された
- C#に依存する拡張機能で、この変更にまだ対応していないもので問題が発生(参照先が古い)
- (Debugger for Unityとかで起こってる問題。アプデあんまされてない拡張機能なこともあり)
解決法
解決法は2つある。C#に依存する拡張機能をいじって参照先を新しくするか、C#の古いバージョンを持ってくるかである。
あんまりアップデートされない拡張機能なら前者の方法が良いと思う。
C#に依存する拡張機能をいじる方法
- VSCodeのMarketPlaceでエラーの出る拡張機能のページへ
- 右のほうの「Resources」欄に「Download Extension」があるのでクリックしてダウンロード。
- 「(拡張機能名).vsix」または「Microsoft.VisualStudio.Services.vsix」がダウンロードされる。
- これの拡張子を「.zip」にして解凍する。(7-zipとかのアーカイバで拡張子そのまま解凍できるが)
- 解凍されたフォルダをVSCodeで開く。
- VSCodeの検索機能で「ms-vscode.csharp」を「ms-dotnettools.csharp」に置き換え。
- 保存して再び圧縮。拡張子を元に戻す**(フォルダ自体を圧縮して二重にならないように注意)**
- VSCodeの拡張機能で右上の「…」ボタンからメニューを開いて「VSIXからのインストール」
(インストールするときに「zip ファイルの中に extension/package.json が見つかりません。」というエラーが出るときはフォルダ自体を圧縮して二重になっている。「extension」フォルダがある階層で圧縮する。)
C#の古いバージョンを持ってくる方法
- ここから古いバージョンのC#のVSIXファイルをダウンロード(VSCodeのMarketPlace公式です)
- VSCodeの拡張機能で右上の「…」ボタンからメニューを開いて「VSIXからのインストール」
(これはVSCodeのMarketPlaceでDownload ExtensionをクリックしたときにリクエストされるURLをpublisherが変更される前のバージョンのものに一部変更しただけ)
個人的感想
そもそもVSIXというパッケージなのを知らなかった。というかこれアーカイブファイルくさいなとおもって試しにzipにしてみたらうまくいってビビった。(最初バイナリレベルで参照先書き換えようとしてたけど)
ググってばっかいないで自分で試すのも大事だったという話。(ググっても出ないものは出ない)
…自分向けメモのまま散文ですいません