2014-01-08 29 views
0

我有一個引用兩個類庫的Web項目。如何獲取項目以引用正確版本的依賴關係?特別是EF 5和6

其中一個庫參考Entity Framework 5.0和其他參考文獻Microsoft.Web.WebPages.OAuth,其依次參考Entity Framework 6.0。沒有找到

方法:「太虛System.Data.Entity.Infrastructure.DbEntityEntry`1

當web項目,繼續在EF5庫來執行代碼中執行代碼,它抱怨。 set_State(System.Data.EntityState)」

我相信這是由於EF6被引用,而不是EF5並且隨後沒有找到上述方法。

我的假設是否正確?如果是這樣,是否有辦法讓每個項目使用正確的版本而不被「重寫」?

我查看了綁定重定向,但不知道如何實現我所需要的?

回答

2

您可以通過將每個庫重定向到正確的文件來解決問題。

這裏是你可以做什麼:

  1. 確保的EntityFramework V6發動機被命名爲EntityFramework.dll。不要管它;
  2. EntityFramework的v5重命名爲EntityFramework.v5.dll;
  3. 如果您的EF v5是以.NET 4.0爲目標的版本,則將用4.4.0.0替換下面的5.0.0.0;
  4. 設置裝配在配置文件中使用以下參數綁定:

    <configuration> 
        <runtime> 
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
         <dependentAssembly> 
         <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
         <codeBase version="5.0.0.0" href="EntityFramework.v5.dll" /> 
         </dependentAssembly> 
        </assemblyBinding> 
        </runtime> 
    </configuration> 
    

這樣一來,每個庫將得到實體框架的首選版本。

但是,您應該知道這個「解決方案」存在一個大問題:如果有人指望Entity Framework處於單一版本中,您將遇到問題,因爲您確實有兩個版本的Entity Framework加載到相同的應用程序中,並且您必須注意應用程序是否知道它(例如,您可能需要配置實體框架兩次)。儘管它不是世界的盡頭,但它在兩個不同版本的.NET庫中是不常見的,幾乎沒有非MS軟件期待它。

真的,它應該是一個簡單得多,而且從長遠來看更可靠,升級使用V5使用實體框架V6庫。

+0

非常感謝,我只是想着實際升級EF5參考。如果它沒有太多麻煩,我可能會更喜歡那條路線。 –

+1

@AdamNaylor:從EF5到EF6升級應該是相當簡單的,並且在長度上MSDN [升級到EF6](http://msdn.microsoft.com/en-US/data/upgradeEF6)進行說明。 –

+0

太好了,謝謝。 –

相關問題