2015-11-02 44 views
0

在你認爲這是一個重複的問題之前,好吧......也許,但我沒有在我的問題的任何地方找到有用的信息。不同的實體框架版本問題

我有一個主要的Web應用程序項目,我們稱之爲項目A和子類庫項目,項目B.

兩個項目都必須與.NET框架4目標框架進行編譯,而且項目B已安裝實體框架版本6.1.3。項目A,而不是,有一個較舊的實體框架4.3.1 ...

忘記這個「更新它」選項:相當不可能,時間到期。我在運行時得到的問題是:「

無法加載文件或程序集‘的EntityFramework,版本= 6.0.0.0,文化=中性公鑰= b77a5c561934e089’或它的一個依賴」的錯誤時,項目B請求由項目A.

我試着卸載項目B上的EntityFramework,清理解決方案,重新安裝EntityFramework但問題仍然存在。我嘗試降低項目B中的EntityFramework,但是我避免了一些浪費的問題(edmx xml版本錯誤,tt命名空間生成,元數據麻煩,提供者問題......),並且在「正常」情況下轉回,之後我必須做一個SVN恢復。

然後,我嘗試在項目B的實體框架引用屬性上設置「specific version ='True'」,但錯誤仍然存​​在。不知道是不是在項目中的AssemblyBinding可能是這個問題的一部分,但是這是在web.config中的配置:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

而且,當我已重新安裝項目EF6.1.3我注意到B,bindingRedirect標記被設置爲oldVersion =「0.0.0.0-6.0.0.0」和newVersion =「6.0.0.0」,但使用該配置,項目A是墜毀的人。

更具體地說,有一個項目C類庫,在這個解決方案中使用了Entity Framework 5,並且顯示了assemblyBinding,它沒有問題......所以,我該怎麼辦?任何建議將不勝感激!

回答

0

做成了!也許這是一個棘手的方式,太髒或不知道..如果你可以評論副作用,這將是有益的,但對我來說這個配置的作品!引用自己:

不知道AssemblyBinding在項目中的可能是這個問題的一部分,但是這在web.config中的配置:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" /> </dependentAssembly> </assemblyBinding>

此外,我注意到,當我在項目B上重新安裝EF6.1.3時,bindingRedirect標記被設置爲oldVersion =「0.0.0.0-6.0.0.0」和newVersion =「6.0.0.0」,但使用該配置,項目A爲那個墜毀的人。

我非常接近,但崩潰是因爲這個原因:EntityFramework部分註冊了4.4.0.0,並導致主項目中的版本衝突。所以,第一步是聲明6.0.0.0版本的EntityFramework部分,但這還不夠,因爲主要項目找不到EF版本6 dll。 Infact,第二步是在assemblyBinding中聲明一個<codeBase>標記,併爲EF6庫設置一個href。在項目的根目錄下,在特定文件夾中添加dll,並將其與<codeBase>標記鏈接,第二步完成,每個EntityFrameworks版本的解決方案中的每個項目似乎都像魅力一樣工作!

所以,結論是:

1)版本6.0.0.0 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

2)在項目根創建一個「庫」目錄的設置後的EntityFramework部分(或名稱爲任何你像,同樣的位置,無論您喜歡...但它必須可以訪問),並把EF 6.0圖書館裏,有<codeBase>標籤鏈接這裏面裝配:

已知的副作用:

  • 如果你不希望這個庫可以被任何人下載呢,記得要限制該庫目錄訪問,在web.config中,IIS,或最有效的方法根據您的環境

  • 在libs下的EF6庫不受Nuget管理,因此,對於將來的EF升級,記住您爲了讓這個工作起作用而做了什麼會很痛苦(寫在技術文檔中,評論web.config等)

我希望這可能會有所幫助!