2013-03-25 26 views
7

的問題類型「System.Data.Linq.DataContext」在去一個特定的頁時未被引用

錯誤的組件定義的(在本地調試):CS0012:類型「系統.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> configuration>程序集中。我沒有列出組件,我懷疑這是更老的版本。無論如何,我做到了。它給了我另一個錯誤,說它不知道如何處理程序集。

我刪除了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。我沒有刪除或調整頁面上的任何參考。所有其他意見都非常出色。

當我在本地運行它,並嘗試去/奶奶我得到上述錯誤。

感謝您的幫助!

解決方案:我進入引用,併爲System.Linq(或舊版本,我想,System.Data.Linq)並將CopyLocal更改爲True。

+0

忘記配置文件中的程序集,您的項目是否只有一組「正常」的引用? (在Solution Explorer中,有沒有參考的項目?) – 2013-03-25 17:51:42

+0

當然是有。它引用System.Data.Linq。我刪除了參考文獻並添加了它,認爲有些東西被掛在那裏。我正在使用包含的.NET System.Data.Linq。它指向C:\ Program Files文件\參考大會\微軟\框架\ .NETFramework \ V4.0 \ System.Data.Linq.dll因爲它應該。值得注意的是我的其他網頁使用linq就好了。我不認爲這是一個linq參考問題,因爲它不是一個合羣的問題 - 它只是這一頁。 – shubniggurath 2013-03-25 17:58:42

+1

您可以提供演示該問題的完整解決方案或項目? – Phil 2013-04-01 21:45:41

回答

21

這爲我工作:

  • 導航到Web項目的引用節點
  • 找到參考System.Data.Linq程序
  • 打開VS屬性窗口
  • 在屬性窗口中,更改複製本地:False爲真

在此之前,System.Data.Linq.dll沒有被複制到bin di教區長。 (將它手動複製到bin目錄中也解決了錯誤)

+0

+1不錯。這一年後仍然存在。對於其他人,我在使用dbml數據上下文的時候遇到了Umbraco 7 WebApi控制器。克里斯描述的本地複製技巧。歡呼 – 2017-03-09 01:45:59

+1

這是爲什麼這樣工作?不管'System.Data.Linq.dll'總是可用,如果它被引用? – 2017-07-24 10:33:15

+0

它可能應該。我想這個錯誤是它被標記爲Copy Local:False。我不知道這是怎麼發生的 – 2017-08-16 11:45:25

7

嘗試添加@using System.Data.Linq你的問題視圖的頂部和 <add namespace="System.Data.Linq" />到web.config中的<pages>部分在查看文件夾。

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> 

注:大會應編譯元素添加。

你可以分享你的視圖,控制器和數據上下文代碼嗎?

+0

不需要在MVC 4中添加組件。 – shubniggurath 2013-04-04 20:05:56

相關問題