我在C#(没有MVC或WebForms)中为AnyCPU编译了ASP .Net Web应用程序,pdb文件已启用并与应用程序一起部署。
当enable 32-bit applications
AppPool 具有默认值时False
,异常的堆栈跟踪具有正确的行号。
当标志设置为True
堆栈跟踪时,行号不正确。
为了清楚起见,我唯一更改的是enable 32-bit applications
我的 Web 应用程序的 AppPool 配置中的标志值。
我在两台机器上试过这个:
- 带有 IIS 8.5.9600.16384 的 Windows 8
- 带有 IIS 7.5.7600.16385 的 Windows Server 2008 R2
在我的特殊情况下,只需重新配置 AppPool 即可(我们已经从 x86 迁移到 AnyCPU,这个过时的配置只是一个错误),但我仍然感兴趣为什么会发生这种情况?(可能是 IIS 中存在一些错误,我无法在任何地方找到提到的这种行为)。
更新:看来我已经想通了,但这是暂时的缓刑:
- 问题几乎可以肯定是由于代码优化(我以这种方式编写代码,排除了其他选项:抖动重新排序函数。这不是编译器,因为我不会在测试之间重新编译应用程序)。
- 大多数优化是通过抖动完成的,x86 优化比 x64 优化更激进,因此产生的代码也不同。当 Microsoft 决定进行 x64 优化时,更激进的路线将被打破。