asp.net-mvc-3 – IIS7中的NLog在发布模式下失败
编辑:正如Kirk Woll正确指出的那样,问题是NLog,而不是NInject.那么让我重新解释一下这个问题:
编辑2:现在我知道NLog是一个IoC问题,我在ASP.NET MVC2 + Ninject + NLog (+ shared hosting?) = NullReferenceException找到了解决方案 我有一个项目正在使用NInject通过ILogger接口将NLogger类注入到我的所有控制器中. Steven,为了回答你的问题以保持我的web.config干净,我使用了一个NLog.Config文件来分离出那个配置. 当我在调试模式下定位IIS7时,代码可以正常工作,但在发布模式下,我得到以下堆栈跟踪. 如果有人知道为什么在调试模式下代码可以工作,为什么在发布它不会,它会非常感激.我还在下面包含了我的NLog配置文件. <?xml version="1.0"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="console" xsi:type="ColoredConsole" layout="${date:format=HH:mm:ss}|${level}|${stacktrace}|${message}" /> <target name="file" xsi:type="File" fileName="${basedir}/App_Data//Logs/site.log" layout="${date}: ${message}" /> <target name="eventlog" xsi:type="EventLog" source="Template" log="Application" layout="${date}: ${message} ${stacktrace}" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="file" /> <logger name="*" minlevel="Fatal" writeTo="eventlog" /> </rules> </nlog> 堆栈跟踪: [NullReferenceException: Object reference not set to an instance of an object.] NLog.LogManager.GetCurrentClassLogger() +84 DynamicInjectorc5f536e7a4564738b2e779e62f9c20c7(Object[] ) +40 Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectActivationProvidersStandardProvider.cs:81 Ninject.Activation.Context.Resolve() in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectActivationContext.cs:157 Ninject.KernelBase.<Resolve>b__7(IContext context) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectKernelBase.cs:375 System.Linq.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x) +32 System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +151 System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +4222965 Ninject.Planning.Targets.Target`1.GetValue(Type service,IContext parent) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectPlanningTargetsTarget.cs:179 Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectPlanningTargetsTarget.cs:147 Ninject.Activation.Providers.StandardProvider.GetValue(IContext context,ITarget target) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectActivationProvidersStandardProvider.cs:97 Ninject.Activation.Providers.<>c__DisplayClass2.<Create>b__1(ITarget target) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectActivationProvidersStandardProvider.cs:81 System.Linq.WhereSelectArrayIterator`2.MoveNext() +85 System.Linq.Buffer`1..ctor(IEnumerable`1 source) +217 System.Linq.Enumerable.ToArray(IEnumerable`1 source) +78 Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectActivationProvidersStandardProvider.cs:81 Ninject.Activation.Context.Resolve() in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectActivationContext.cs:157 Ninject.KernelBase.<Resolve>b__7(IContext context) in c:ProjectsNinjectMaintenance2.2ninjectsrcNinjectKernelBase.cs:375 System.Linq.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x) +32 System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +151 System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +4222965 Ninject.Web.Mvc.NinjectDependencyResolver.GetService(Type serviceType) in c:ProjectsNinjectMaintenance2.2ninject.web.mvcmvc3srcNinject.Web.MvcNinjectDependencyResolver.cs:56 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType) +51 [InvalidOperationException: An error occurred when trying to create a controller of type 'BossP.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.] System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,Type controllerType) +182 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,Type controllerType) +80 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,String controllerName) +74 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext,IController& controller,IControllerFactory& factory) +232 System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +49 System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +13 System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +124 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback callback,Object state) +98 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,Object state) +50 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context,AsyncCallback cb,Object extraData) +16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8963444 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +184 解决方法
好吧,我花了2个晚上进行调查并解决问题.最初我认为这个问题与NLog日志记录框架有关,所以我转而使用Log4Net.这很简单,因为我使用了Ninject.Extensions.Logging.但这没有帮助.
然后我更新到Ninject的预发布版本,异常消息变得更加明确:“无法确定DynamicInjectorb709a37f02d44e5a8615c5fde4e0746d的当前类”. 最后一些谷歌搜索引导我进行以下讨论:https://groups.google.com/forum/#!msg/ninject/V_bS0ykJxAA/IBnsGVnL50UJ 解决方案:“尝试使用反射,而不是使用将UseReflectionBasedInjection设置为true的NinjectSettings实例创建内核” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC jQueryUI datepicke
- asp.net-core – 不使用HTTPS的ASP.NET 5 OAuth重
- asp.net – Visual Studio 2008使用CodeBehind失
- asp.net – WCF与Web-api平台中的数据和事务
- asp.net-mvc – viewbag和viewstate之间的区别?
- asp.net-mvc – HttpResponse.RemoveOutputCache
- asp.net – RequiredFieldValidator要求用户单击
- 企业ASP.NET MVC 3架构大纲
- asp.net-mvc – ASP.net MVC 4 WebApi中的嵌套资
- ASP.Net的最佳免费文件管理器