NinjectControllerFactory FileLoadException错误

时间:2013-12-26 00:10:21

标签: asp.net entity-framework ninject hresult fileloadexception

我尝试创建只是示例的项目,我想使用Ninject.I像这样创建NinjectControllerFactory.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Ninject;
using System.Web.Routing;
using Moq;
using System.Linq;
using SportStore.Domain.Entities;
using SportStore.Domain.Abstract;
using System.Collections.Generic;
using SportStore.Domain.Concrete;

namespace SportStore.WebUI.Infrastructure
{
    public class NinjectControllerFactory : DefaultControllerFactory
    {
        private IKernel ninjectKernel;

        public NinjectControllerFactory()
        {
            ninjectKernel = new StandardKernel();
            AddBindings();
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null
                ? null
                : (IController)ninjectKernel.Get(controllerType);
        }

        private void AddBindings()
        {   
            ninjectKernel.Bind<IProductsRepository>().To<EFProductRepository>();
        }

    }
}

我像这样创建IProductRepository.cs

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SportStore.Domain.Entities;

namespace SportStore.Domain.Abstract
{
    public interface IProductsRepository
    {
        IQueryable<Product> Products { get; }
    }
}

最后一个像这样的EFProductRepository

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SportStore.Domain.Abstract;
using SportStore.Domain.Entities;

namespace SportStore.Domain.Concrete
{
    public class EFProductRepository : IProductsRepository
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<Product> Products
        {
            get { return context.Products; }
        }
    }
}

因此,当我运行项目时,我收到此错误

  

无法加载文件或程序集&#39; EntityFramework,Version = 6.0.0.0,   Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;或其中一个   依赖。定位程序集的清单定义没有   匹配程序集引用。 (HRESULT异常:0x80131040)

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.IO.FileLoadException:无法加载文件或   assembly&#39; EntityFramework,Version = 6.0.0.0,Culture = neutral,   公钥= b77a5c561934e089&#39;或其中一个依赖项。该   定位程序集的清单定义与程序集不匹配   参考。 (HRESULT异常:0x80131040)

     

来源错误:

     

第11行:公共类EFProductRepository:IProductsRepository   第12行:{第13行:私有EFDbContext上下文=新   EFDbContext();第14行:第15行:公共IQueryable   产品

     

源文件:c:\ Users \ Ayyildiz \ Documents \ Visual Studio   2012 \项目\ SportStore \ SportStore.Domain \混凝土\ EFProductRepository.cs   行:13

     

装配加载跟踪:以下信息可能对您有所帮助   确定程序集&#39; EntityFramework,Version = 6.0.0.0,   Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;无法加载。

     

===预绑定状态信息===日志:用户= Ayyildiz-PC \ Ayyildiz日志:DisplayName = EntityFramework,Version = 6.0.0.0,Culture = neutral,   PublicKeyToken = b77a5c561934e089(完全指定)LOG:Appbase =   file:/// C:/ Users / Ayyildiz / Documents / Visual Studio   2012 / Projects / SportStore / SportStore.WebUI / LOG:Initial PrivatePath =   C:\ Users \ Ayyildiz \ Documents \ Visual Studio   2012 \ Projects \ SportStore \ SportStore.WebUI \ bin调用程序集:   SportStore.Domain,版本= 1.0.0.0,文化=中立,   公钥=空。   ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C:\ Users \ Ayyildiz \ Documents \ Visual   Studio 2012 \ Projects \ SportStore \ SportStore.WebUI \ web.config日志:使用   主机配置文件:   C:\ Users \ Ayyildiz \ Documents \ IISExpress \ config \ aspnet.config日志:使用   来自的机器配置文件   C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。   日志:政策后参考:EntityFramework,版本= 6.0.0.0,   Culture = neutral,PublicKeyToken = b77a5c561934e089日志:正在尝试   下载新的URL   file:/// C:/ Users / Ayyildiz / AppData / Local / Temp / Temporary ASP.NET   文件/根/ 85c19813 / 4c228712 / EntityFramework.DLL。日志:正在尝试   下载新的URL   file:/// C:/ Users / Ayyildiz / AppData / Local / Temp / Temporary ASP.NET   文件/根/ 85c19813 / 4c228712 /的EntityFramework / EntityFramework.DLL。日志:   试图下载新的URL   file:/// C:/ Users / Ayyildiz / Documents / Visual Studio   2012 /项目/ SportStore / SportStore.WebUI /斌/ EntityFramework.DLL。   警告:比较程序集名称导致不匹配:重大   版本错误:无法完成装配设置(hr = 0x80131040)。   探测终止。

     

堆栈追踪:

     

[FileLoadException:无法加载文件或程序集&#39; EntityFramework,   Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089&#39;要么   其中一个依赖项。定位程序集的清单定义   与装配参考不匹配。 (HRESULT的例外情况:   0x80131040)] SportStore.Domain.Concrete.EFProductRepository..ctor()   在c:\ Users \ Ayyildiz \ Documents \ Visual Studio中   2012 \项目\ SportStore \ SportStore.Domain \混凝土\ EFProductRepository.cs:13   DynamicInjectorc6bf6cff03594d109af1167280b346c5(Object [])+70
  Ninject.Activation.Providers.StandardProvider.Create(IContext context)   在   C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:97   Ninject.Activation.Context.Resolve()in   C:\项目\ Ninject \ ninject的\ src \ Ninject \激活\ Context.cs:157
  Ninject。&lt;&gt; c_ DisplayClass10.b _c(IBinding binding)in   C:\项目\ Ninject \ ninject \ SRC \ Ninject \ KernelBase.cs:386
  System.Linq.WhereSelectEnumerableIterator 2.MoveNext() +145
System.Linq.Enumerable.SingleOrDefault(IEnumerable
1 source)+4077101   Ninject.Planning.Targets.Target 1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:197 Ninject.Planning.Targets.Target 1.ResolveWithin(IContext parent)in   C:\项目\ Ninject \ ninject的\ src \ Ninject \规划\目标\ Target.cs:165   Ninject.Activation.Providers.StandardProvider.GetValue(IContext   上下文,IT目标)   C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:114   Ninject.Activation.Providers&LT;&GT; C_ DisplayClass4.b _2(ITarget   目标)   C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:96   System.Linq.WhereSelectArrayIterator 2.MoveNext() +66
System.Linq.Buffer
1..ctor(IEnumerable 1 source) +216
System.Linq.Enumerable.ToArray(IEnumerable
1来源)+77
  Ninject.Activation.Providers.StandardProvider.Create(IContext context)   在   C:\项目\ Ninject \ ninject \ SRC \ Ninject \激活\提供商\ StandardProvider.cs:96   Ninject.Activation.Context.Resolve()in   C:\项目\ Ninject \ ninject的\ src \ Ninject \激活\ Context.cs:157
  Ninject。&lt;&gt; c_ DisplayClass10.b _c(IBinding binding)in   C:\项目\ Ninject \ ninject \ SRC \ Ninject \ KernelBase.cs:386
  System.Linq.WhereSelectEnumerableIterator 2.MoveNext() +145
System.Linq.Enumerable.Single(IEnumerable
1 source)+191
  Ninject.ResolutionExtensions.Get(IResolutionRoot root,Type service,   IParameter []参数)in   C:\项目\ Ninject \ ninject \ SRC \ Ninject \语法\ ResolutionExtensions.cs:151   SportStore.WebUI.Infrastructure.NinjectControllerFactory.GetControllerInstance(的RequestContext   requestContext,输入controllerType)   c:\ Users \ Ayyildiz \ Documents \ Visual Studio   2012 \项目\ SportStore \ SportStore.WebUI \基础设施\ NinjectControllerFactory.cs:29   System.Web.Mvc.DefaultControllerFactory.CreateController(的RequestContext   requestContext,String controllerName)+226
  System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase   httpContext,IController&amp;控制器,IControllerFactory&amp;厂)   +326 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback回调,对象状态)+177
  System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,   AsyncCallback回调,对象状态)+88
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext的   context,AsyncCallback cb,Object extraData)+50
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+155

     

版本信息:Microsoft .NET Framework版本:4.0.30319;   ASP.NET版本:4.0.30319.17929

我正在使用EntityFramework v6,而我正在使用MSSQL server 2008 r2。 NinjectControllerFactory.cs中的此错误将此行

return controllerType == null
                ? null
                : (IController)ninjectKernel.Get(controllerType);

有人可以帮我吗?感谢

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,这就是我所做的修复我的事情。也许,这会帮助你解决问题。

问题似乎是您的参考文献(SportsStore.Domain和SportsStore.WebUI)中的EntityFramework版本号以及SportsStore.WebUI中的web.config。

检查每个EntityFramework引用并将每个版本更改为6.0.0.0。在SportsStore.WebUI中,您将无法更改它,因为它从您的web.config获取条目。因此,只需从SportsStore.WebUI中删除EntityFramework引用即可。编译,它应该工作。

我希望这会有所帮助。

答案 1 :(得分:0)

只需从所有地方删除引用,并检查不同的配置文件 来自web ui的web.config,packges.config 和来自域

的web.config,packges.confg

评论所有已放置然后添加新参考。