2012-06-26 23 views
10

是如何解決在我的項目組件已升級到MVC4和EF5版本之間的衝突問題?找到衝突 - > MVC4/EF4 - > EF5

的問題是一個事實,即我的控制器和模型可以包括System.Data.Objects,但現在我的看法明顯。我使用MVC 4

,我的項目是從MVC升級3.

實體框架是版本5

我有一個控制器,它能夠從System.Data.Objects使用ObjectContext的。

我Usings: 使用System.Data.Objects; using System.Data.Entity;

當我嘗試在視圖形式System.Data.Objects的使用,包括,我得到:

CS0234:類型或命名空間名稱「對象」在命名空間「System.Data」不存在(是否缺少程序集引用)

我針對.NET 4.5

我的體型顯示此消息: C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets( 1561,5):警告MSB3247:發現相同相關程序集的不同版本之間存在衝突。

+1

我不完全確定你的問題是什麼,但我想我的第一個問題是,無論如何,你可以避免與視圖中的objectcontext交互?這通常是一個糟糕的主意,違反了你在mvc模式中「愚蠢」的觀點規則。除了在視圖中顯示特定邏輯之外,您應該避免任何其他內容在附註中,您是否可以發佈您的視圖(或其中的一部分),以便更好地理解您的問題? – theMothaShip

+0

這是我想要在視圖中執行的操作:@ObjectContext.GetObjectType(item.TimelineEntry.Document.GetType())。Name.ToString(); –

+0

因此,可能發生的情況是,您在項目中引用的某個其他程序集引用了實體框架的不同版本,因此您爲什麼在構建顯示中獲得該消息。你的應用程序只是一個項目文件還是同一個解決方案中有多個項目都可能引用或不引用實體框架? – theMothaShip

回答

3

如果你看一下在構建消息,它指出了4.0版本的.NET Framework的被引用...有沒有在您的項目文件或網頁/ app.config中指定一個矛盾的版本的.NET Framework的設置?

您是否熟悉fuslog?您可以將其設置爲記錄運行應用程序時.net正在執行的所有程序集綁定。然後,您應該能夠查看有關什麼時候受到約束的詳細信息。如果仍然無法解決問題,則可以始終在web.config中對該.dll執行綁定重定向。

http://msdn.microsoft.com/en-us/library/eftw1fys.aspx - 綁定重定向

http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx - 融合日誌查看器

建立融合記錄儀,看看輸出是什麼。如果你沒有從中得到答案,嘗試綁定重定向(這會給你至少一個臨時解決方案)。

+0

我不知道如何找出什麼是參考什麼。項目屬性引用.Net 4.5。我如何跟蹤這個?在引用中只有一個System.Data.Entity DLL。 –

+0

看起來像視圖正在訪問system.data.entity的實體框架5版本,並且控制器正在訪問具有system.data.objects的版本4。我如何1)確保整個項目使用新的組件。 2)獲取版本5 EF上的對象上下文? –

+0

奇怪 - 模型訪問objectcontext也沒有問題。 –

28

您可以在診斷模式下構建解決方案以獲取有關錯誤的更多詳細信息。

打開VS選項對話框(工具>選項),定位到「項目和解決方案」節點,並選擇「生成和運行」。將MS Build項目生成輸出詳細信息更改爲Diagnostic。

看一看here

+0

診斷模式會告訴您具體哪些dll正在拉動其他版本。很有幫助。 – Laurence

+4

只需要注意,一旦獲得構建輸出,就會在輸出窗口中搜索單詞「衝突」,您會發現問題。 –

0

在我發佈到的目錄中,有一個名爲aspnet_client的文件夾。我移動它(而不是刪除它),重新發布,並且它工作。我不知道爲什麼那個文件夾決定給我帶來麻煩。

相關問題