「System.Linq」をImportしたソースでコンパイルエラーが出るときの対処法

C#やVB.netなどのソースに、「<%@ Import Namespace=”System.Linq” %>」が入っている場合、以下のようなエラーが出てコンパイルが通らないことがあります。

型または名前空間名 ‘Linq’ は名前空間 ‘System’ に存在しません。アセンブリ参照が不足しています。

The type or namespace name ‘Linq’ does not exist in the namespace ‘System’

System.Linqは .NET 3.5から有効で、古いアセンブリには含まれていません。

そのため、何度かVisualStudioや.NET Frameworkのインストールを繰り返した場合、複数のバージョンが混在することになり、不整合が起こったりするために、設定はきちんと行っているんだけど、うまくコンパイルが通らない。。という現象になってしまうようです。

そんな時の対処法をまとめておきます。

①まず、始めに、Projectのtargetのバージョンを確認しましょう。

プロジェクトの「プロパティ(Property) ⇒ ビルド(Build) ⇒ 対象とするFramework 」の部分が、「.NET Framework 3.5」になっているかを確認してください。

3.5より古いバージョンにはLinqは含まれないので、気をつけましょう。

②次に、アセンブリがきちんと参照されているかを確認します。

System.Linqのコンパイルに必要なアセンブリ参照は、「System.Core」です。

プロジェクトの「プロパティ(Property) ⇒ 参照設定 」の中に、「System.Core」が含まれているかを確認してください。

もし、含まれていない場合は、

・Binフォルダを右クリック
・参照の追加を選択
・タブ「.NET」を選択し、その中からコンポーネント「System.Core」を選択。
・OKを押して、参照を追加する

を行いましょう。

以上で、大体の場合はOKとなるはずです。

それでもダメな場合の手段

それでもダメな場合は、以下の2つを試してみてください。

「System.Core」だけでなく、「System.Data.Linq」を追加する。
⇒私の場合は解決しませんでした。

一度、targetの.NET Frameworkを4.0にしてコンパイルして、再度3.5に戻してコンパイルする。
⇒私の場合は、この手順で解決しました。。