この記事は公開から2年以上経過しています。
VSCodeで.NET 6プロジェクトを開いたときにCS2046エラーが発生する問題に遭遇したため、その解決策についての備忘録。
問題
VSCodeで.NET 6プロジェクトのC#ソースを開くとusing System;
やstring xxx;
の定義部などで
定義済みの型 ‘System.*’ は定義、またはインポートされていません
や
型または名前空間の名前 ‘System’ が見つかりませんでした(usingディレクティブまたはアセンブリ参照が指定されていることを確認してください)
のようにCS0518やCS2046エラーが大量発生してしまう(このとき、ビルドや実行/デバッグは問題なく実行できる)。
原因
VSCodeのC#拡張(OmniSharp)がNET 6に対応できるように設定されていない。
対応
以下の手順でC#(OmniSharp)拡張の設定を.NET 6用に変更する。
-
VSCode設定画面の拡張設定で
Omnisharp: Use Modern Net
にチェックを入れる。 -
VSCodeを再起動する。
VSCodeを再起動するとC# OUTPUTウィンドウが表示され、依存関係のあるパッケージが自動インストールされて上述のエラーが発生しなくなります。
Debian 11のC# OUTPUTウィンドウ表示例:
Installing C# dependencies...
Platform: linux, x86_64, name=debian, version=11
Downloading package 'OmniSharp for Linux (.NET 6 / x64)' (40041 KB).................... Done!
Validating download...
Integrity Check succeeded.
Installing package 'OmniSharp for Linux (.NET 6 / x64)'
Finished
ちなみに、このバージョンのOmniSharpはUnityを含む非.SDKスタイルの.NET Frameworkプロジェクトで利用できない制限や、バグが存在する可能性もあるとのことです。
このあたりの詳細についてはC#拡張のReadme.mdや設定項目の説明文を、ご一読ください。
以上です。