2014-01-20 16 views
15

我想升級到Unity版本(2.1.505.2),但是當我運行該應用程序我得到FileLoadException無法加載文件或程序集「Microsoft.Practices.Unity」

無法裝入以下文件或程序集'Microsoft.Practices.Unity, Version = 2.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35' 或它的一個依賴關係。

我們從Unity 2.0.414.0升級到2.1.505.2。

  • 引用團結參考DLL
  • 有在GAC引用沒有統一的dll的正確版本的解決方案的所有項目引用。 (通過檢查gacutil -l進行雙重檢查)
  • 我從存檔中刪除了所有Unity dll。雙重檢查使用PowerShell

    PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { "{0}`t{1}" -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion } 
    

我怎樣才能找出/誰仍然是指統一2.0.414.0?

FusionLogVw不會告訴我哪個DLL導致問題。

任何幫助非常感謝!

+0

的[未能加載文件或程序集或它的一個依賴]可能的複製(http://stackoverflow.com/questions/4469929/could -not-load-file-or-assembly-or-one-of-its-dependencies) – Matt

回答

11

問題是另一個微軟的dll指的是舊版本的統一。我發現這是出乎意料的是檢查每個引用的dll的名稱空間,並發現另一個包含名爲「unity」的dll。

更新:

  • Microsoft.Practices.EnterpriseLibrary.Common
  • Microsoft.Practices.EnterpriseLibrary.Validation

到最新發布的版本解決了這個問題。

我希望保存一天對於一些迷失的靈魂在那裏誰也拉他的頭髮出過這個問題... :)

0

檢查你的app.config/web.config,當然你的項目引用。

+0

已經完成了。我確信沒有什麼是指2.0.414。別的東西正在拉動這個依賴關係,運行時正在抱怨說,正如例外中提到的那樣,它無法找到不再存在的程序集版本。 – bas

1

您應該添加重定向到正確裝配:

但是請注意,版本2.1.505.0應該用於重定向!

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

你不能設置2.1.505.2,因爲下一個原因:

enter image description here

統一裝配2.1.505.2包含不同版本的AssemblyFileVersion和的AssemblyVersion。

CLR不關心AssemblyFileVersion,所以只使用AssemblyVersion! 而AssemblyFileVersion僅由nuget使用!

0

如果你有resharper,你可以刪除問題引用,構建,轉到使用它的類(有錯誤),並讓resharper爲你解決它。

撲救faffing左右,但我明白不是每個人都有的ReSharper:d

相關問題