【发布时间】: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() +1451 来源)+4077101 Ninject.Planning.Targets.Target
System.Linq.Enumerable.SingleOrDefault(IEnumerable1.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() +661..ctor(IEnumerable
System.Linq.Buffer1 source) +2161 源) +77
System.Linq.Enumerable.ToArray(IEnumerable
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() +1451 来源)+191
System.Linq.Enumerable.Single(IEnumerable
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 中有这个:
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
标签: asp.net entity-framework ninject hresult fileloadexception