Autofac错误:无法加载文件或程序集'System.Web.Http,Version = 5.2.0.0,...'我的项目是Owin WebApi2 SelfHost

时间:2015-03-05 11:15:39

标签: .net asp.net-web-api autofac owin self-hosting

我有一个使用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)

我的配置非常受这个帖子的启发: -

Dependency injection not working with Owin self-hosted Web Api 2 and Autofac

此外,我发现其他人在使用Autofac的依赖性错误时遇到了困难,并且能够通过重新安装Microsoft.AspNet.WebApi.WebHost来解决类似的问题:

GlobalConfiguration.Configure() not present after Web API 2 and .NET 4.5.1 migration

但这对我不起作用我不知道为什么。我尝试从头开始重新安装所有东西也没有帮助。除了Autofac在重新安装时还有几个权限问题这一事实。

有人对此错误有任何经验吗?请帮忙。谢谢!

3 个答案:

答案 0 :(得分:23)

我设法通过above thread中@ user998660的评论帮助解决了此依赖性问题。

我做的是:

  • 我在项目的参考资料中右键单击了程序集System.Web.Http。
  • 我注意到我的项目引用的程序集版本是5.2.3.0
  • 从上面的错误中我知道Autofac正在尝试引用System.Web.Http版本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>

答案 1 :(得分:0)

打开解决方案的托管nuget包,并安装最新的Microsoft Asp.net Web Api 2.2,这解决了我的问题。

答案 2 :(得分:0)

有时,.nuget还原可能会产生问题..虽然在成功签入后,在.nuget.config文件中将disableSourceControlIntegration设置为false会解决此问题。  add key =“disableSourceControlIntegration”value =“false”