2016-10-13  2,146 views 评论

Autofac对Controller进行依赖服务注入时报错 未能加载文件或程序集Autofac, Version=3.4.0.0

使用Autofac进行关于Controller所以依赖的服务注入时出现以下错误:

“未能加载文件或程序集“Autofac, Version=3.4.0.0, Culture=neutral, PublicKeyToken=…..”

出错代码如下:

var webAssembly = Assembly.GetExecutingAssembly();

var container = (ObjectContainer.Current as AutofacObjectContainer).Container;

var builder = new ContainerBuilder();

builder.RegisterControllers(webAssembly);

builder.Update(container);

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

出错的地方正是在RegisterControllers(),RegisterControllers这个方法依赖的程序集是Autofac.Integration.MVC.dll

查看项目中使用引入的Autofac.dll和Autofac.Integration.MVC5.dll 版本号分别为3.5.2和3.3.4

既然是在注册服务时出现这个异常的,那么考虑可能出现了版本依赖不对应问题,于是在www.nuget.org 查看了对应版本的依赖项

ASP.NET MVC 5.1 Integration 3.3.0

Dependencies

 

Autofac 3.5.2

Dependencies

This package has no dependencies.

对比查看到的两个依赖项Autofac.dll(3.5.2)和Autofac.Integration.MVC5.dll(3.3.4)均在允许版本内,问题不在这两个程序集,再看Autofac.Integration.MVC5.dll的另一个依赖项为System.Web.MVC 版本要求在5.1.0到5.2.0间,而本项目下版本为5.2.2,并且对应的Razor、WebPages等程序集版本均为5.2.2,这都是在默认创建项目时自动引入的依赖项,替换后异常消失。

 

由于这些程序集都是在创建项目是默认导入的,如果觉得每次替换比较烦可以修改默认创建项目时加载的程序集:Vsiual Studio 2013 修改创建默认工程时加载的依赖程序集

给我留言

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: