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

Mat*_*uGD 40 asp.net azure-web-sites asp.net-core

我有一个带有网站和几个项目库的ASP.NET 5解决方案.我正在使用MVC 6和Entity Framework 7.本地应用程序工作正常,直到今天它还在Azure上部署为Azure网站.

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

在此输入图像描述

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

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

似乎在启动/配置步骤期间发生了错误/异常,但我仍然在没有详细信息的情况下获得通用错误页面.甚至在服务器上生成的版本(DetailedErrors文件夹)我得到了这个:

在此输入图像描述

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

在此输入图像描述

即使我在启动/配置中删除代码并按照建议添加try/catch,我也得到了相同的错误而没有发现.它似乎是一个配置/编译问题,但很难在没有任何信息的情况下进行调试.

NPN*_*son 21

在Azure中运行应用程序时,在ASPNET5应用程序中启动时出现的错误很难跟踪(至少在测试版3中).希望他们找到改善体验的方法.我不得不求助于将我的创业公司剥离到裸机,然后逐行添加代码,直到失败发生(在我的情况下,它是一个缺少的环境变量).

我也使用了这样的代码(仅用于调试),这可能有所帮助,具体取决于错误发生的位置:

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);
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新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();
Run Code Online (Sandbox Code Playgroud)

  • 我也有一个缺少的环境变量.请注意,将密钥添加到azure配置表是不够的,我还需要添加该值.这是使用clientId和clientSecret. (2认同)

Jon*_*vis 20

在RC1中(可能是beta8),显然应该使用:

app.UseDeveloperExceptionPage();
Run Code Online (Sandbox Code Playgroud)

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

但这对我不起作用.我得到的错误消息是"启动应用程序时出错",我发现没有一个给定的配置会解决这个问题,因为错误发生在配置执行之前.

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

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

  • 我遇到了同样的问题,错误没有出现.我发布删除现有文件,似乎它对我有用,我一定有类似的问题.对于其他人,如果您要从Visual Studio发布,请勾选"删除目标位置的其他文件". (5认同)
  • 您如何删除Azure网站上的整个部署目录?我知道如何在Cloud Service上执行此操作,但无法在Azure网站上找到方法. (4认同)
  • @Yodacheese的推荐对我来说是个窍门.而Josh我认为通过服务器资源管理器(在VS中)可能会这样做,但事实证明你不能删除这个面板的任何东西.但在尝试删除发布两次的所有文件后,我能够解决上面的确切问题. (3认同)

Hol*_*Jan 8

您必须在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>
Run Code Online (Sandbox Code Playgroud)

  • 这仍然适用于beta-8吗?修改了发布的wwwroot中的web.config,但没有额外的信息记录事件日志或详细错误. (2认同)

JRo*_*ert 8

我在使用运行dnx-clr-win-x64.1.0.0-rc1-update1的Web应用程序时遇到了完全相同的错误.我直接从Visual Studio 2015 Enterprise Update 1进行了部署.我发现每当我在新创建的Web应用程序上进行第一次部署时,该站点都在工作.从第二次部署开始(即使部署完全相同的内容),我开始看到内部服务器错误500.这使我进入以下解决方案:

在Visual Studio的发布向导中启用"在目标中删除其他文件"为我修复了它.

在此输入图像描述


Mo *_*our 5

我有同样的问题,并花了很多时间试图挖掘错误日志等(上面给出的所有其他解决方案).他们都不知道出了什么问题.

我做了什么帮助我终于看到错误只是尝试发布到本地IIS(毕竟azure web-app在IIS内部运行你的dnx).

然后我可以立即看到IIS尝试编译源时出错.(在我看来是一些畸形的nuget包).

简而言之:

通过发布到本地IIS来重新创建azure web-app上发生的事情.