8

問題

(ローカルデバッグで)特定のページに移動するときのエラー:CS0012:タイプ 'System.Data.Linq.DataContext'が参照されていないアセンブリで定義されています。アセンブリ 'System.Data.Linq、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089'への参照を追加する必要があります。

エラーメッセージで参照されているコード行は次のとおりです。

28行目:

29行目:

行30:パブリッククラス_Page_Views_blah_granny_cshtml:System.Web.Mvc.WebViewPage {

31行目:

32行目:#lineを隠しました

他のすべてのページはうまく機能します - これは特に1つのページにアクセスするときにだけ起こります。参照は他のすべてのページに取り組んでいます。私が判断できる限り、これは参照に関する問題ではありません。

私はこの問題の調査にかなりの時間を費やしました。

私が見つけたすべての答えはweb.configに行き、system.web> configuration> assemblyにlinqへのアセンブリ参照を置くことを提案しました。私のものにはリストされたアセンブリがありません、そして、私はこれがより古いバージョンのためにもっとあると思う。とにかくやった。アセンブリの処理方法がわからないという別のエラーが表示されました。

system.data.linqを削除して、もう一度追加しました。

VSとコンピュータの両方を再起動しました。

私のコードは、VSによってデフォルトで生成されたもので、System.Linqを持っています。

背景 - これはこれがどのように始まったかです:

アプリケーションはMVC 4、C#です。

DataContextに新しいクラスを作成し、新しいコントローラを追加して、厳密に型指定されたビューを作成しました。

これは非常によく似たコードです(おそらく必要ではありませんが、念のため)。

2つのクラス

public class granny { 
            public string data { get; set; }
            public string criteria { get; set; }
}

public List<granny> getGranny() {
    var a = from x in grannytable
            join dx in anothertable
            on x.criteria equals dx.criteria
            select new granny {
                data = x.somenewdata;
            }; 
    return a.ToList();
}

これがコントローラです。

    public ActionResult granny() {
        return View(db.getGranny());
    }

空想は何もありません。

このページは典型的なかみそりビューで、「リスト」と強く型付けされています...作成するために繰り返すテーブルを持っていて、進行するにつれてデータをダンプします。

必要に応じて追加のコードを提供しています。

私はweb.configをめちゃくちゃにしていません。私はページ上の参考文献を削除も微調整もしていません。他の見解はすべて驚くほどうまくいっています。

ローカルに実行して/ grannyに移動しようとすると、上記のエラーが発生します。

ご協力いただきありがとうございます!

ソリューション:私は参照を調べ、そしてSystem.Linq(またはそれ以前のバージョンの場合はSystem.Data.Linq)について、CopyLocalをTrueに変更しました。


  • 設定ファイル内のアセンブリについて忘れると、プロジェクトには「通常の」ファイルだけが含まれません。参照のセット? (ソリューションエクスプローラーで、参照項目はありますか?) - Jon Skeet
  • 確かにあります。 System.Data.Linqを参照しています。参照を削除して追加し、何かがハングアップしたと考えました。付属の.NET System.Data.Linqを使用しています。それは、C:¥Program Files¥Reference Assemblies¥Microsoft¥Framework¥.NETFramework¥v4.0¥System.Data.Linq.dllを参照してください。私の他のページでもlinqがうまく使われていることは注目に値します。私はそれがlinqの参照問題であるとは思わない、なぜならそれは厄介な問題ではない - それはちょうどこの1ページであるからだ。 - shubniggurath
  • 問題を実証する完全なソリューションまたはプロジェクトを提供できますか? - Phil
  • 解決策全体?それともあなたが興味を持っている特定のファイルやプロパティはありますか? - shubniggurath
  • @shubniggurath完全なソリューション。言うごとにあなたの解決策である必要はありません。問題を実証するものだけです。 - Schandlich

3 답변


24

これは私のために働いた:

  • Webプロジェクトの「参照」ノードに移動します
  • System.Data.Linqへの参照を検索
  • VSプロパティウィンドウを開く
  • プロパティウィンドウで、Copy Local:FalseをTrueに変更します。

これ以前は、System.Data.Linq.dllはbinディレクトリにコピーされていませんでした。 (手動でbinディレクトリにコピーしてもエラーは解決しました)


  • +1いいね。これはまだ1年後にも発生します。他の誰にとっても、dbmlデータコンテキストを使用するときにUmbraco 7 WebApiコントローラーでこれを経験しました。 Chrisが説明しているようにローカルにコピーしてください。乾杯 - Marc D.
  • なぜこれが機能するのですか?しないでくださいSystem.Data.Linq.dll参照されている場合は、いつでも利用できますか。 - Protector one
  • たぶんそうです。そのバグは、それがCopy Local:Falseとマークされていたことだと思います。どのように発生するのかわかりません。 - Chris F Carroll

8

MVCはその場であなたの見解を編集することはできません。ビューにDataContextへの参照が含まれているようです。 web.configに参照を追加すると、コンパイラはファイルを探すようになります。

<configuration> 
 <system.web>
  <compilation targetFramework="4.0"> 
    <assemblies> 
      <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
   </assemblies> 
</compilation>

注:アセンブリはcompilation要素の下に追加する必要があります。

ビュー、コントローラ、データコンテキストのコードを共有できますか?


  • アセンブリをMVC 4に追加する必要はありません。 - shubniggurath

7

追加してみてください@using System.Data.Linq問題ビューの上部に<add namespace="System.Data.Linq" /><pages>あなたのweb.configのセクションビューフォルダ。

リンクされた質問


関連する質問

最近の質問