LinuxでVSCodeのC#のインテリセンスが機能しないときの対応

この記事は公開から3年以上経過しています。

Linux(Debian 10)でVSCodeとC#拡張(OmniSharp)で.NET 5コード開発を行っているときに、C#ソースコードのインテリセンスなどC#拡張の機能が利用できない現象が発生したため、その解決策についての備忘録。

現象

VSCodeでC#プロジェクトを開いてC#ファイルの変数名やメソッド名をマウスオーバーしてもインテリセンス(ヒント)が表示されず、リファクタリング(シンボル名の変更)なども使用できない。

file

この状態で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に変更する。

file

上記設定を変更すると

file

というダイアログが表示されるのでRestart OmniSharpボタンを押下してOmniSharpサーバーを再起動すれば、下図のとおりC#拡張のインテリセンス(ヒント)やリファクタリング(シンボル名の変更)などが利用できるようになる。

file

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする