我有一个大型、复杂的网站,大部分是由其他人编写的。我做了一些更改,现在当我尝试访问网站上的任何页面(不仅仅是我的更改所在的页面)时,我收到下面描述的错误。虽然我想知道如何解决这个问题,但我更想知道下一步应该采取的一般诊断步骤,以便找出问题 - 我希望下次能够自己解决它。预先感谢您的帮助!
当我将浏览器导航到网站上的任何页面时,我收到服务器错误:
Parser Error
Parser Error Message: Object reference not set to an instance of an object.
Source Error: [No relevant source lines]
我检查了服务器上的事件日志,并得到了一些稍微更详细的信息:
Event code: 3006
Event message: A parser error has occurred.
Exception information:
Exception type: HttpException
Exception message: Object reference not set to an instance of an object.
Stack trace:
at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters)
最佳答案
1) 源错误未显示任何行或行号,因此请确保您正在进行调试构建。另外,请确保您的 web.config 文件中有以下内容。
2) 检查您的 global.asax 文件...那里可能有问题。您有一个空引用异常,并且它可能发生在您在 global.asax.cs 中更改的任何代码中。
编辑:要调试 global.asax.cs 文件,通常最简单的方法是在 Session_Start 事件处理程序中放置 System.Diagnostics.Debugger.Launch() 调用。如果没有处理程序,请添加处理程序。
3) 检查并确保 ASP.NET 安装正确。 IIS 中虚拟目录的属性中有一个名为 ASP.NET 的选项卡。检查版本。如果未正确安装,请运行“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -i”。
4) 如果您使用 VS,则转到 CTRL-ALT-E(或“调试/异常”菜单),并选中公共(public)语言运行时异常的“抛出”选项,这样每当抛出 CLR 异常时 VS 就会中断,然后您可以准确地看到它发生的位置。在调试器中启动应用程序并了解发生了什么。
5) 如果异常是在代码之外引发的,请检查堆栈跟踪以找出异常的来源。
6) 如果您必须更深入,并且您知道它发生在 .NET 中,但您不知道为什么,请启用 .NET Framework 源代码单步执行(如果您使用的是 VS2008 SP1,它位于选项/调试中的某个位置) 。如果您使用的是早期版本,则必须查找如何启用 .NET Framework 符号等...但您不必这样做,只需将其添加为“下一步”即可。
关于asp.net - 如何调试 ASP.NET 编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029215/