将 ASP.NET 应用程序从 VS 2010 迁移到 VS 2015 后出现奇怪的无限循环

Weird infinite loop after migrating ASP.NET application from VS 2010 to VS 2015

我们有一个旧的但可靠的 ASP.NET Forms Web 应用程序,使用 .NET 4 框架使用 Visual Studio 2010 SP1 创建。我们的目标是将我们的开发环境移动到 Visual Studio 2015,我的第一步是在安装了 VS 2015 的 VM 中测试 ASP.NET 应用程序。不幸的是,我遇到了一个非常奇怪的问题,无法找出导致问题的原因。

将项目迁移到 Visual Studio 2015 后(没有问题),我在 VS 2015 中重新构建了它。网站运行良好,但在单击登录按钮后,网站进入无限循环在登录 aspx 页面的 Page_Load() 事件和母版页(登录页面继承自)的 Page_Load() 事件之间跳转。

如果我在 login.aspx 的 Page_Load() 事件的第一行插入一个断点,我可以逐行执行此事件,当它到达 [=30] 中的最后一条语句时=](),它立即跳转到 masterpage.master 的 Page_Load() 事件的第一行,如果我单步执行它,它会重新进入 Page_Load 的第一行login.aspx 事件。这永远重复!唯一的偏差是,第一次通过时,它还会进入 Global.asax 中的两个空事件(Application_BeginRequest 和 Application_AuthenticateRequest)。

我最初认为 Page_Load() 事件中的任何一个都发生了一些愚蠢的事情,但它只是无聊的代码,做的很少。如果我注释掉两个 Page_Load() 事件中的所有代码并将每个代码替换为 int x = 1; 我仍然会得到完全相同的行为。

我已经回到应用程序的 VS 2010 构建版本并比较了所有源代码、配置文件等,没有什么不同。两个版本都是 运行 针对相同的 OS (Windows 8.1 x64)、浏览器 (IE 11) 和安装的 .NET 框架。我什至构建了 VS 2010 版本并将其部署到 VS 2015 VM 上,发现它运行良好。我唯一的结论是,在 VS 2015 中构建它之后有些东西发生了变化。

任何帮助将不胜感激,因为我无法弄清楚是什么原因造成的,也不知道如何进一步调查。

问题的最终原因是用于检测浏览器上是否启用了 Javascript 的服务器控件。此服务器控件是作为外部引用添加到 ASP.NET 项目的 pre-compiled .NET DLL。此 DLL 在 ASP.NET 项目的 VS 2010 和 VS 2015 版本中均未更改。老实说,我仍然不太明白在 VS 2015 中重建 ASP.NET 项目是如何导致这种情况的,但这一定是某种向后兼容性问题。