2023-12-16

VSCodeでC#の補完が効かないときは

目次

突然 C#コードの補完や定義へのジャンプが効かなくなるという災害

 vscode のアプデを自動にしていると、年に1度か2度起こる災害。 大抵 .Netのメジャーアプデのタイミングで起こるので、頻度が低いため毎度肝を冷やす。

 今回出たエラーは以下のとおり。

Activating C# + C# Dev Kit + C# IntelliCode...
waiting for named pipe information from server...
[Error - 8:34:02 PM] Microsoft.CodeAnalysis.LanguageServer client: couldn't create connection to server.
Error: Timeout. Named pipe information not received from server.
	at q.<anonymous> (c:\Users\imosan\.vscode\extensions\ms-dotnettools.csharp-2.14.8-win32-x64\dist\extension.js:2:1290527)
	at Generator.next (<anonymous>)
	at s (c:\Users\imosan\.vscode\extensions\ms-dotnettools.csharp-2.14.8-win32-x64\dist\extension.js:2:1280557)

 補完もジャンプも不能である。

 ちなみに、この不具合は既に報告されているのでいずれ修正版が出るだろう。

https://github.com/microsoft/vscode-dotnettools/issues/808

 しかし、.Netの更新毎に起きるので、次も起こる可能性に備えたい。

 毎回、適当に最新の .Netと Visual Studioをインストールして .csprojや .slnを再生成しているとなんとなく直っている。

 しかし、そんなオカルトなどない。単なる拡張機能のバグが何度かのアプデによって直っているだけの話である。

 今回、明確な防御対策を取ったのでメモを残す。

  • vscode の自動アプデをやめる
  • extensions の自動アプデをやめる
  • C# extensionのバージョンを 1.26.0 まで下げる(2.xにはしない)
  • Omnisharp が Auto Start になっているか確認する

 この4つを実行すれば、補完やジャンプは復活する。この作業の Unityデバッガの動作への影響はない。

 前提環境は以下の通り。

vscode 1.85.1


Version: 1.85.1 (user setup)
Commit: 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2
Date: 2023-12-13T09:49:37.021Z
Electron: 25.9.7
ElectronBuildId: 25551756
Chromium: 114.0.5735.289
Node.js: 18.15.0
V8: 11.4.183.29-electron.0
OS: Windows_NT x64 10.0.22635

extensions:


C# 2.14.8
C# Dev Kit 1.1.16
IntelliCode for C# Dev Kit v0.1.26
Unity 0.9.3

 既に上記4つがインストールされている場合は、以降の作業の前に予め4つともアンインストールしておくほうがよい。

vscode の自動アプデをやめる

 File->Preferences->Settings を開き、updateで検索して、下図の Update: Mode (Applies to all profiles)None にする。

 vscode の再起動を求められるので OKする。

extensions の自動アプデをやめる

 次は、extension auto-updateで検索して、下図の Extensions: Auto Update: (Applies to all profiles)None にする。

C# extensionのバージョンを 1.26.0 まで下げる(2.xにはしない)

 Unityエクステンションをインストールする時、以下が同時に自動インストールされる。EXTENSIONS で ”Unity” で検索してインストールする。

  • C#
  • C# Dev Kit 1.1.16
  • IntelliCode for C# Dev Kit v0.1.26
  • Unity

 エクステンションは常に最新版がインストールされるので、ここではインストール後に “C#” のバージョンだけ下げる。これで補完もジャンプもできるようになる。

 現時点(16.Dec.2023)での vscodeだと、最新版のextensionの”Uninstall”にドロップダウンメニューがあるので、“Install Another Version…”を選ぶ。

 EXTENSIONSメニューの”C#“で右クリックメニューからも選べる。

 リストが表示されるので、1.x.xのうち、最も新しいものを選ぶ。つまり、2.x.x以外の最新版である 1.26.0をインストールする

Omnisharp が Auto Start になっているか確認する

 File->Preferences->Settings を開き、omnisharpで検索して、下図の Omnisharp: Auto Start をチェックする。

 あとは、C#エクステンションに表示されるReloadを押すか、vscodeを再起動すれば、無事補完機能は復活する。

 再起動後、The C# Dev Kit extension requires version 2.0.0 or greater of the C# (ms-dotnettools.csharp) extension. Please upgrade. というメッセージが出るが、これは”C#“エクステンションのバグフィックスを待つしかないので、それまでは無視。