この記事は公開から3年以上経過しています。
Linux(Debian 10)でVSCodeとC#拡張(OmniSharp)で.NET 5コード開発を行っているときに、C#ソースコードのインテリセンスなどC#拡張の機能が利用できない現象が発生したため、その解決策についての備忘録。
現象
VSCodeでC#プロジェクトを開いてC#ファイルの変数名やメソッド名をマウスオーバーしてもインテリセンス(ヒント)が表示されず、リファクタリング(シンボル名の変更)なども使用できない。
この状態でOmniSharpのOUTPUTウィンドウを確認すると、以下のようなエラーメッセージが表示されている。
[warn]: OmniSharp.CompositionHostBuilder
It looks like you have Mono installed which contains a MSBuild lower than 16.8.0 which is the minimum supported by the configured .NET Core Sdk.
Try updating Mono to the latest stable or preview version to enable better .NET Core Sdk support.
・
・
・
[warn]: OmniSharp.MSBuild.ProjectManager
Failed to load project file '/PathToProject/ProjectName.csproj'.
/PathToProject/ProjectName.csproj
/usr/lib/mono/msbuild/Current/bin/Microsoft.Common.CurrentVersion.targets(1193,5): Error: This project targets .NET 5.0 but the currently used MSBuild is not compatible with it - MSBuild 16.8+ is required. To solve this, run OmniSharp on its embedded Mono (e.g. 'omnisharp.useGlobalMono':'never' in C# Extension for VS Code) or, if running on global Mono installation, make sure at least Mono 6.13 is installed on your machine (https://mono-project.com/download/). Alternatively, add 'omnisharp.json' to your project root with the setting { "msbuild": { "useBundledOnly": true } }.
[fail]: OmniSharp.MSBuild.ProjectManager
Attempted to update project that is not loaded: /PathToProject/ProjectName.csproj
原因
C#拡張でシステムにグローバルインストールされている.NET Core3.1/.NET 5プロジェクト非対応のMono(6.12.0以降)が利用されている。
対応
VSCodeのC#拡張のOmnisharp: Use Global Mono
を、C#拡張内部のMonoを利用する設定auto
またはnever
に変更する。
上記設定を変更すると
というダイアログが表示されるのでRestart OmniSharp
ボタンを押下してOmniSharpサーバーを再起動すれば、下図のとおりC#拡張のインテリセンス(ヒント)やリファクタリング(シンボル名の変更)などが利用できるようになる。
以上です。