【问题标题】:The type 'System.Data.Linq.DataContext' is defined in an assembly that is not referenced类型“System.Data.Linq.DataContext”在未引用的程序集中定义
【发布时间】:2013-03-25 17:49:00
【问题描述】:

问题

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

所有其他页面都运行良好 - 仅在访问一个页面时才会发生这种情况。该参考适用于所有其他页面。据我所知,这不是参考的问题。

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

我找到的所有答案都建议转到 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());
    }

没什么特别的。

该页面是典型的 razor 视图,强类型“列表”...它有一个表,它可以迭代创建,并在执行过程中转储数据。

我很乐意根据需要提供任何其他代码。

我没有弄乱 web.config。我没有删除或调整页面上的任何参考。所有其他观点都非常有效。

当我在本地运行它并尝试转到 /granny 时,出现上述错误。

感谢您的帮助!

解决方案:我查看了参考资料,并针对 System.Linq(或者对于旧版本,我想是 System.Data.Linq)并将 CopyLocal 更改为 True。

【问题讨论】:

  • 忘记配置文件中的程序集,您的项目不只是有一组“正常”的引用吗? (在解决方案资源管理器中,是否有参考项?)
  • 当然有。它引用 System.Data.Linq。我删除了引用并添加了它,以为那里挂了一些东西。我正在使用包含的 .NET System.Data.Linq。它应该指向 C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Linq.dll。值得注意的是,我的其他页面使用 linq 就好了。我不认为这是一个 linq 参考问题,因为它不是一个群居的问题——它只是这一页。
  • 你能提供一个完整的解决方案或项目来演示这个问题吗?
  • 整个解决方案?或者是否有您感兴趣的特定文件或属性?
  • @shubniggurath 一个完整的解决方案。不必说是您的解决方案。只是一个证明问题的地方。

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


【解决方案1】:

这对我有用:

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

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

【讨论】:

  • +1 不错。这在一年后仍然成立。对于其他任何人,我在使用 dbml 数据上下文时使用 Umbraco 7 WebApi 控制器体验了这一点。克里斯描述的复制本地就可以了。干杯
  • 为什么会这样?如果被引用,System.Data.Linq.dll 不应该始终可用吗?
  • 它可能应该。我想,这个错误是它被标记为 Copy Local:False。我不知道这是怎么回事
【解决方案2】:

尝试在问题视图顶部添加@using System.Data.Linq,然后 &lt;add namespace="System.Data.Linq" /&gt; 进入 Views 文件夹中 web.config 的 &lt;pages&gt; 部分。

【讨论】:

    【解决方案3】:

    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>
    

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

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

    【讨论】:

    • 在 MVC 4 中不需要添加程序集。
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 2014-08-15
    • 2016-05-01
    • 2018-01-10
    • 1970-01-01
    • 2023-03-28
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多