12

问题

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

4

3 回答 3

29

这对我有用:

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

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

于 2015-12-18T13:34:22.810 回答
9

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

于 2013-04-03T07:47:38.840 回答
9

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>

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

你能分享你的视图、控制器和数据上下文代码吗?

于 2013-04-03T19:56:37.833 回答