Dot-Net

Autofac 錯誤:無法載入文件或程序集 ‘System.Web.Http, Version=5.2.0.0,…’ 我的項目是 Owin WebApi2 SelfHost

  • January 21, 2017

我有一個使用 Microsoft.AspNet.WebApi.OwinSelfHost 的簡單項目。這是一個 Owin 自託管的 WebApi 2 項目。該項目非常類似於:-

https://github.com/attilah/AngularJSAuthentication

我唯一的區別是我的安全模組在單獨的程序集中(一切都類似於上面的項目)。我使用 Autofac 來解決我的依賴關係。

該項目在沒有 Autofac 時有效。但是,一旦我嘗試使用相應的安全模組和 Autofac 設置我的項目,我所面臨的就是這個錯誤:-

Could not load file or assembly 'System.Web.Http, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我的配置非常受此執行緒的啟發:-

依賴注入不適用於 Owin 自託管 Web Api 2 和 Autofac

此外,我發現其他人正在為 Autofac 的這個依賴錯誤而苦苦掙扎,並且能夠通過重新安裝 Microsoft.AspNet.WebApi.WebHost 來解決類似的問題:

Web API 2 和 .NET 4.5.1 遷移後不存在 GlobalConfiguration.Configure()

但這對我不起作用,我不知道為什麼。我嘗試從頭開始重新安裝所有內容也無濟於事。除了 Autofac 在重新安裝時還有幾個權限問題之外。

有人對此錯誤有任何經驗嗎?請幫忙。謝謝!

在上述執行緒中@user998660 的評論的幫助下,我設法解決了這個依賴問題。

我所做的是:

  • 我在項目的引用中右鍵點擊了程序集 System.Web.Http。
  • 我注意到我的項目引用的程序集版本是5.2.3.0
  • 從上面的錯誤我知道 Autofac 正在嘗試引用 System.Web.Http version 5.2.0.0。我需要一種方法來告訴我的應用程序使用較新的版本5.2.3.0而不是5.2.0.0.

這是我需要添加到我的 Web.config<assemblyBinding>部分的內容:

 <dependentAssembly>
   <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
   <bindingRedirect oldVersion="0.0.0.0-5.2.0.0" newVersion="5.2.3.0" />
 </dependentAssembly>

引用自:https://stackoverflow.com/questions/28876571