如何获取部署在Azure网站上的ASP.NET 5应用程序的错误详细信息?

我有一个网站和几个项目库的ASP.NET 5解决scheme。 我正在使用MVC 6和entity framework7.本地的应用程序工作正常,直到今天它也在Azure部署作为一个Azure网站也工作。

但是,今天在Azure上最新的部署之后,我在启动时遇到了这样的错误500(在本地工作仍然正常):

在这里输入图像说明

我试图通过以下方式获得更多细节:

  • 使用中间件诊断
  • 在web.config文件中添加customError / httpError设置
  • 下载生成的DetailedError页面

看起来错误/exception是在启动/configuration步骤中发生的,但是我仍然没有得到详细的通用错误页面。 即使在服务器上生成的版本(DetailedErrors文件夹)我得到这个:

在这里输入图像说明

我启用了失败的请求跟踪,但仍然没有有用的信息:

在这里输入图像说明

即使我剥离启动/configuration中的代码,并添加一个try / catchbuild议我得到了同样的错误没有détails。 这似乎是一个configuration/编译问题,但很难debugging没有任何信息。

在RC1中(也许是beta8),应该明显地使用:

app.UseDeveloperExceptionPage(); 

..显然只有当app.Properties["host.AppMode"]"development"

但这不适合我。 我得到的错误消息是特别是“启动应用程序时发生错误” ,我发现没有任何给定的configuration将解决此问题,因为错误发生之前configuration执行。

不知何故,在发布期间,发布目标文件夹必须已经损坏,因为我发现删除整个部署目录并重新发布可以解决问题

否则,这里是参考: http : //docs.asp.net/en/latest/fundamentals/diagnostics.html

在ASPNET5应用程序中启动时发生的错误在Azure中运行应用程序时(至less在beta 3中)很难追踪到。 希望他们find改善经验的方法。 我必须求助于剥离我的启动下来的骨头,然后逐行添加代码,直到失败发生(在我的情况下,这是一个缺less的环境variables)。

我也使用过这样的代码(仅用于debugging),这可能有助于取决于错误发生的位置:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env ) { try { // Add MVC to the request pipeline. app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}" ); }); } //exceptions in startup are really bad when running in azure, all you will get is an internal server error //this code will write the exception message to the browser instead. Only use for debugging!!! catch (Exception ex) { app.Run(async context => { context.Response.ContentType = "text/plain"; await context.Response.WriteAsync(ex.Message); }); } } 

更新10/27/2016自我原来的答案以来,很多已经改变。 最新的指导发布在这里:

https://docs.asp.net/en/latest/fundamentals/hosting.html

所以,添加:

.WebHostBuilder上的.CaptureStartupErrors(true)和.UseSetting(WebHostDefaults.DetailedErrorsKey,“true”)如下所示:

  var host = new WebHostBuilder() .CaptureStartupErrors(true) .UseSetting(WebHostDefaults.DetailedErrorsKey, "true") .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); 

您必须在web.config文件中将应用程序设置属性ASPNET_DETAILED_ERRORS设置为true

我编辑的web.config文件的例子:

 <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="bootstrapper-version" value="1.0.0-beta6" /> <add key="runtime-path" value="..\approot\runtimes" /> <add key="dnx-version" value="1.0.0-beta6" /> <add key="dnx-clr" value="clr" /> <add key="dnx-app-base" value="..\approot\src\MyApp" /> <!-- This will turn on detailed errors when deployed to remote servers --> <!-- This setting is not recommended for production --> <add key="ASPNET_DETAILED_ERRORS" value="true" /> </appSettings> <system.web> <httpRuntime targetFramework="4.5.1" /> </system.web> </configuration> 

我遇到了一个运行dnx-clr-win-x64.1.0.0-rc1-update1的web应用程序的错误。 我直接从Visual Studio 2015企业更新1进行部署。我发现,只要我在新创build的Web应用上进行第一次部署,该网站就在工作。 从第二次部署开始(甚至在部署完全相同的内容时),我开始看到内部服务器错误500.这使我得到以下解决scheme:

在Visual Studio的发布向导中启用“在目的地删除其他文件”为我解决了这个问题。

在这里输入图像说明

我有同样的问题,并花了很多时间试图挖掘错误日志等(上述所有其他解决scheme)。 他们没有提供任何问题的线索。

我所做的那些帮助我终于看到了错误,只是简单地尝试发布到本地IIS (毕竟azure色的Web应用程序在内部在IIS上运行你的dnx)。

我可以立即看到IIS尝试编译源代码时出现错误。 (在我的情况是一些畸形的nuget包)。

所以简而言之:

通过发布到本地IIS重新创buildAzure Web应用上发生的事情。

使用以下内容在您的wwwroot文件夹内创build一个web.config

 <configuration> <system.web> <customErrors mode="Off" /> </system.web> </configuration> 

你有没有检查eventlog.xml文件? 它位于D:\ home \ LogFiles目录中。 您可以从您的应用程序的Kudu站点查看它,或使用Azure网站事件查看器扩展。

您是否尝试使用远程debugging Azure Web应用程序? 机会是有一些exception发生这是负责这一点,如果你看着你的DEBUG OUTPUT窗口,您可能会看到发生了什么exception,然后更改Visual Studio设置打破该exception,看看它发生的地方。 检查这篇文章,了解如何远程debugging – http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-window-azure-web-site-with-visual-工作室2013.aspx

在我的情况下,beta5,web.config中的自定义错误没有帮助,本地IIS是好的,添加一个exception处理程序不显示任何东西。 唯一有效的工作是核武器和重新部署。

在Web应用程序的应用程序设置中,在应用程序设置部分,添加(或更改) Hosting:Environment的值为Development 。 然后你得到和你本地开发一样的错误页面。 在我的Startup.cs中,我有以下代码的常规Configure()方法:(仍然在MVC 1.0 RC1-final中)

  if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else 

希望这可以帮助!