“System.Data.Linq.DataContext”类型在未引用的程序集中定义

时间:2013-03-25 17:49:00

标签: c# linq asp.net-mvc-4 web-config .net-assembly

问题

转到特定页面时出错(在本地调试中):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 hidden

所有其他页面都很有效 - 只有在特别访问一个页面时才会出现这种情况。该引用适用于所有其他页面。据我所知,这不是引用的问题。

我花了很多时间研究这个问题。

我发现的所有答案建议转到web.config并在system.web>中将linq的汇编引用放入配置>组件。我没有列出组件,我怀疑这是旧版本的更多。无论如何,我做到了。它给了我另一个错误,说它不知道如何处理程序集。

我删除了system.data.linq并再次添加。

我重新启动了VS和我的电脑。

我的代码 - 由VS默认生成 - 具有System.Linq。

背景 - 这是如何开始的:

该应用程序是MVC 4,C#。

我在DataContext中创建了一个新类,添加了一个新控制器,并创建了一个强类型视图。

这是一些非常相似的代码(可能不需要,但以防万一)。

两个班级:

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。

3 个答案:

答案 0 :(得分:24)

这对我有用:

  • 导航到Web项目的“参考”节点
  • 查找对System.Data.Linq
  • 的引用
  • 打开VS属性窗口
  • 在属性窗口中,将Copy Local:False更改为True

在此之前,System.Data.Linq.dll没有被复制到bin目录中。 (手动将其复制到bin目录中也解决了错误)

答案 1 :(得分: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>

  

注意:程序集应添加在编译元素下。

您可以分享您的视图,控制器和datacontext代码吗?

答案 2 :(得分:7)

尝试在问题视图的顶部添加@using System.Data.Linq  {strong}视图文件夹中的web.config <add namespace="System.Data.Linq" />部分<pages>