【问题标题】:NinjectControllerFactory FileLoadException ErrorNinjectControllerFactory FileLoadException 错误
【发布时间】:2014-01-13 16:41:15
【问题描述】:

我尝试只创建示例项目,我想使用 Ninject。我像这样创建 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; }
        }
    }
}

所以当我运行项目时,我得到了这个错误

无法加载文件或程序集 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)

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

异常详细信息:System.IO.FileLoadException:无法加载文件或 程序集 'EntityFramework,版本 = 6.0.0.0,文化 = 中性, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)

来源错误:

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

源文件:c:\Users\Ayyildiz\Documents\Visual Studio 2012\Projects\SportStore\SportStore.Domain\Concrete\EFProductRepository.cs 线路:13

装配负载跟踪:以下信息可能有助于 确定为什么程序集 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 无法加载。

=== 预绑定状态信息 === LOG: User = Ayyildiz-PC\Ayyildiz LOG: DisplayName = EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089(完全指定)日志:Appbase = file:///C:/Users/Ayyildiz/Documents/Visual Studio 2012/Projects/SportStore/SportStore.WebUI/ 日志:初始 PrivatePath = C:\Users\Ayyildiz\Documents\Visual Studio 2012\Projects\SportStore\SportStore.WebUI\bin 调用程序集: SportStore.Domain,版本=1.0.0.0,文化=中性, PublicKeyToken=null。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件: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\Framework\v4.0.30319\config\machine.config。 LOG:后策略参考:EntityFramework,Version=6.0.0.0, 文化=中性,PublicKeyToken=b77a5c561934e089 日志:正在尝试 下载新网址 file:///C:/Users/Ayyildiz/AppData/Local/Temp/Temporary ASP.NET 文件/root/85c19813/4c228712/EntityFramework.DLL。日志:尝试 下载新网址 file:///C:/Users/Ayyildiz/AppData/Local/Temp/Temporary ASP.NET 文件/root/85c19813/4c228712/EntityFramework/EntityFramework.DLL。日志: 正在尝试下载新 URL file:///C:/Users/Ayyildiz/Documents/Visual Studio 2012/项目/SportStore/SportStore.WebUI/bin/EntityFramework.DLL。 警告:比较程序集名称导致不匹配:主要 版本 ERR:无法完成程序集设置 (hr = 0x80131040)。 探测终止。

堆栈跟踪:

[FileLoadException: 无法加载文件或程序集 'EntityFramework, 版本=6.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 或 它的依赖项之一。定位程序集的清单定义 与程序集引用不匹配。 (HRESULT 的例外情况: 0x80131040)] SportStore.Domain.Concrete.EFProductRepository..ctor() 在 c:\Users\Ayyildiz\Documents\Visual Studio 2012\Projects\SportStore\SportStore.Domain\Concrete\EFProductRepository.cs:13 DynamicInjectorc6bf6cff03594d109af1167280b346c5(Object[]) +70
Ninject.Activation.Providers.StandardProvider.Create(IContext 上下文) 在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:97 Ninject.Activation.Context.Resolve() 在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:157
Ninject.c_DisplayClass10.b_c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:386
System.Linq.WhereSelectEnumerableIterator2.MoveNext() +145
System.Linq.Enumerable.SingleOrDefault(IEnumerable
1 来源)+4077101 Ninject.Planning.Targets.Target1.GetValue(Type service, IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:197 Ninject.Planning.Targets.Target1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs:165 Ninject.Activation.Providers.StandardProvider.GetValue(IContext 上下文,ITarget 目标)在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:114 Ninject.Activation.Providers.c_DisplayClass4.b_2(ITarget 目标)在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:96 System.Linq.WhereSelectArrayIterator2.MoveNext() +66
System.Linq.Buffer
1..ctor(IEnumerable1 source) +216
System.Linq.Enumerable.ToArray(IEnumerable
1 源) +77
Ninject.Activation.Providers.StandardProvider.Create(IContext 上下文) 在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs:96 Ninject.Activation.Context.Resolve() 在 c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:157
Ninject.c_DisplayClass10.b_c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:386
System.Linq.WhereSelectEnumerableIterator2.MoveNext() +145
System.Linq.Enumerable.Single(IEnumerable
1 来源)+191
Ninject.ResolutionExtensions.Get(IResolutionRoot 根,类型服务, IParameter[] 参数)在 c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:151 SportStore.WebUI.Infrastructure.NinjectControllerFactory.GetControllerInstance(RequestContext requestContext,类型控制器类型)在 c:\Users\Ayyildiz\Documents\Visual Studio 2012\Projects\SportStore\SportStore.WebUI\Infrastructure\NinjectControllerFactory.cs:29 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称)+226
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext、IController&控制器、IControllerFactory&工厂) +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 上下文,AsyncCallback cb,对象 extraData) +50
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& 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);

有人可以帮助我吗?谢谢

【问题讨论】:

  • 可能您在项目中添加了对 EF6 的引用,并且没有从 Nuget 安装它。确保你的 webconfig 中有这个:&lt;section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /&gt;

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


【解决方案1】:

我遇到了同样的问题,这就是我解决问题的方法。也许,这将帮助您解决问题。

问题似乎是您的引用(SportsStore.Domain 和 SportsStore.WebUI)和 SportsStore.WebUI 中的 web.config 中的 EntityFramework 的版本号问题。

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

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多