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

ami*_*thk 10 .net self-hosting autofac asp.net-web-api owin

我有一个使用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)
Run Code Online (Sandbox Code Playgroud)

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

依赖注入无法与Owin自托管Web Api 2和Autofac一起使用

此外,我发现其他人在努力解决Autofac的这种依赖性问题,并且能够通过重新安装Microsoft.AspNet.WebApi.WebHost来解决类似的问题:

在Web API 2和.NET 4.5.1迁移之后,GlobalConfiguration.Configure()不存在

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

有人有这个错误的经验吗?请帮忙.谢谢!

ami*_*thk 24

我设法在上面的线程中通过@ 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>
Run Code Online (Sandbox Code Playgroud)