您所描述的崩溃发生在 kernel32.dll 中 - 这可能表明这不是托管代码内部的崩溃,而是 .NET 引擎本身(呃) - 在这种情况下,验证预编译器路径等会不会产生任何积极的结果(恕我直言)。
我建议您尝试通过“二进制搜索”(对于罪魁祸首)解决此问题:-)。作为第一次“迭代”,我将创建一个简单的 aspx 页面 (/Test.aspx),禁用调试模式并尝试点击该页面(没有代码隐藏,只是带有标题和 Hello,world 正文的基本 HTML)。这将验证 ASP.NET 是否已安装并在您的 IIS 服务器上正常工作。
如果这个最简单的页面再次失败,我建议@JSC 在评论中提到的内容:在 IIS 上重新注册 ASP.NET:
rem (reregister ASP.NET in IIS)
rem (run as administrator!)
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
一旦最简单的页面运行,我会添加简单的代码隐藏,试试看。一旦代码隐藏运行,我会尝试通过剥离所有代码隐藏来更新应用程序的真实起始页面,只留下标记并尝试点击页面 - 是的,它看起来很糟糕,但至少它可能会显示:-) . 之后,我会尝试只添加初始化逻辑,看看情况如何......
本质上,您需要找到应用程序中导致崩溃的任何“事物”。我认为这两个极端是:标记+没有代码后面=工作,标记+所有代码后面=崩溃;二进制搜索“方法”将启用一半的代码,看看它是否仍然显示(我们现在不担心功能 - 当然它不会按预期运行)。如果它不显示,请禁用前半部分的后半部分(即只有四分之一的代码将处于活动状态),试试看。继续前进,直到您将搜索限制在有问题的区域...
我建议的另一种方法是在虚拟机上安装 Server 2003 (IIS6) / Server 2008 (IIS7) - VirtualPC、VMWare、VirtualBox(如果您无法访问 MSDN 下载的服务器映像,您可以随时下载试用版 - Server 2008 试用版有效期为 60 天,外加两次“重置”)。在虚拟机中安装干净的操作系统后,尝试部署您的应用程序并查看它在该环境中的行为。