日志记录。缺少方法' WriteWarning'例外

时间:2014-12-13 13:19:44

标签: c# exception logging asp.net-core

我创建了新的ASP.NET vNext项目并将以下内容添加到Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();
        // Add cookie-based authentication to the request pipeline
        app.UseCookieAuthentication(o =>
        {
            o.AuthenticationType = CookieAuthenticationDefaults.AuthenticationType; 
            o.LoginPath = new PathString("/Account/Login");
        });

        app.UseMvc();
        app.UseWelcomePage();

        app.UseIdentity();
    }

和project.json

"dependencies": {
    "Kestrel": "1.0.0-beta1",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
    "Microsoft.Net.Http.Client": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-beta1",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1",

    "Microsoft.Framework.Logging.Console": "1.0.0-beta1",

    "Microsoft.AspNet.Mvc": "6.0.0-beta1",
    "Microsoft.AspNet.Identity": "3.0.0-beta1",
    "Microsoft.AspNet.Security": "1.0.0-beta1",
    "Microsoft.AspNet.Security.Cookies": "1.0.0-*",
},

一开始,我收到以下异常

System.MissingMethodException
Method not found: 'Void Microsoft.Framework.Logging.LoggerExtensions.WriteWarning(Microsoft.Framework.Logging.ILogger, System.String)'.
at Microsoft.AspNet.Security.Cookies.CookieAuthenticationHandler.<AuthenticateCoreAsync>d__1.MoveNext() 
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(TStateMachine& stateMachine) 
at Microsoft.AspNet.Security.Cookies.CookieAuthenticationHandler.AuthenticateCoreAsync() 
at System.Threading.LazyInitializer.EnsureInitializedCore<T>(T& target, Boolean& initialized, Object& syncLock, Func<T> valueFactory) 
at System.Threading.LazyInitializer.EnsureInitialized<T>(T& target, Boolean& initialized, Object& syncLock, Func<T> valueFactory) 
at Microsoft.AspNet.Security.Infrastructure.AuthenticationHandler.AuthenticateAsync() 
at Microsoft.AspNet.Security.Infrastructure.AuthenticationHandler.<BaseInitializeAsync>d__1.MoveNext() 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
at Microsoft.AspNet.Security.Infrastructure.AuthenticationMiddleware<TOptions>.<Invoke>d__1.MoveNext() 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
at Microsoft.AspNet.Loader.IIS.KlrHttpApplication.<ProcessRequestAsyncImpl>d__1.MoveNext() 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
at Microsoft.AspNet.Loader.IIS.HttpApplicationBase.<InvokeProcessRequestAsyncImpl>d__1.MoveNext()N

从另一方面来看,下一行不会引发异常:     loggerFactory.Create(&#34; TestLogger&#34;)。WriteWarning(&#34;一些警告信息&#34;);

1 个答案:

答案 0 :(得分:1)

回答具体问题

您的问题似乎源于您正在混合依赖项版本的事实,而对于预发布依赖项,则没有兼容性栏。你基本上必须全面使用相同的版本。

我认为事情从这一行开始:

 "Microsoft.AspNet.Security.Cookies": "1.0.0-*",

这意味着您要求提供最新的nuget包,并且根据您的nuget源(请分享您的nuget.config),这可能意味着您获得的此包的版本比其他包更新标记为beta1

例如:

 "Microsoft.Framework.Logging.Console": "1.0.0-beta1",

尝试将软件包标记为1.0.0-beta1。

另一个注意事项

调用中间件的顺序很重要,它决定了管道的执行顺序。在您的情况下,您在MVC之后添加了身份,您希望将该行移到AddMvc上方。