我有一个带有网站和几个项目库的ASP.NET 5解决方案。我正在使用MVC 6和Entity Framework 7.本地应用程序工作正常,直到今天它还在Azure上部署为Azure网站。
但是今天在Azure上进行最新部署后,我在启动时遇到了类似错误500(仍在本地工作正常):
我试图通过以下方式获取更多详细信息:
似乎在启动/配置步骤期间发生了错误/异常,但我仍然在没有详细信息的情况下获得通用错误页面。即使是在服务器上生成的版本(DetailedErrors文件夹),我也得到了这个:
我启用了失败的请求跟踪但仍然没有有用的信息:
即使我删除了启动/配置中的代码并按照建议添加了try / catch,我也得到了相同的错误而没有发现。它似乎是一个配置/编译问题,但没有任何信息很难调试。
答案 0 :(得分:20)
在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);
});
}
}
2016年10月27日更新自我原来的答案以来,已经发生了很多变化。最新指南发布在这里:
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();
答案 1 :(得分:20)
在RC1中(或许是beta8),显然应该使用:
app.UseDeveloperExceptionPage();
..显然只有在app.Properties["host.AppMode"]
为"development"
时才有效。
但这对我没有用。我收到的错误消息是&#34;启动应用程序时发生错误&#34; ,我发现没有一个给定的配置会解决这个问题,因为错误发生在配置之前执行。
不知何故,发布目标文件夹在发布期间必定已损坏,因为我发现删除整个部署目录并重新发布解决了问题。
否则,这里是参考:http://docs.asp.net/en/latest/fundamentals/diagnostics.html
答案 2 :(得分: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>
答案 3 :(得分:8)
我在运行dnx-clr-win-x64.1.0.0-rc1-update1的网络应用中遇到了完全相同的错误。我直接从Visual Studio 2015 Enterprise Update 1进行了部署。我发现每当我在新创建的Web应用程序上进行第一次部署时,该站点都在工作。从第二次部署开始(即使部署完全相同的内容),我开始看到内部服务器错误500.这使我得到了以下解决方案:
启用&#34;删除目的地的其他文件&#34;在Visual Studio的发布向导中为我修复了它。
答案 4 :(得分:5)
我遇到了同样的问题,花了很多时间试图深入研究错误日志等(上面给出的所有其他解决方案)。他们都不知道出了什么问题。
我做了什么帮助我终于看到错误只是尝试publish to a local IIS(毕竟azure web-app在IIS内部运行你的dnx)。
我可以立即看到IIS尝试编译源时出错。 (在我看来是一些畸形的nuget包)。
通过发布到本地IIS来重新创建azure web-app上发生的事情。
答案 5 :(得分:4)
使用以下内容在web.config
文件夹中创建wwwroot
:
<configuration>
<system.web>
<customErrors mode="Off" />
</system.web>
</configuration>
答案 6 :(得分:3)
您是否已检入eventlog.xml文件?它位于D:\ home \ LogFiles目录中。您可以从应用程序的Kudu站点查看它,或使用Azure网站事件查看器扩展。
答案 7 :(得分:3)
您是否尝试使用远程调试 Azure Webapp?有可能会发生一些异常,并且如果您看到DEBUG OUTPUT窗口,您可能会看到正在发生的异常,然后更改Visual Studio设置以中断该异常以查看它发生的位置。查看本文以了解如何远程调试 - http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-window-azure-web-site-with-visual-studio-2013.aspx
答案 8 :(得分:1)
在我使用beta5的情况下,web.config中的自定义错误没有帮助,本地IIS没问题,并且添加异常处理程序并没有显示任何内容。唯一有效的方法就是核准并重新部署。
答案 9 :(得分:0)
在Web应用程序的“应用程序”设置中,在“应用程序设置”部分中,将主机:环境的值(或更改值)添加到开发。然后,您将获得与本地开发中相同的错误页面。在我的Startup.cs中,我使用以下代码的常规Configure()方法:(仍然在MVC 1.0 RC1-final中)
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
希望这有帮助!