ASP.NET 根据每个请求重新编译

ASP.NET recompiles on every request

我有一个 ASP.NET Webforms 编译站点,可以在我的本地机器上完美运行。一旦网站被推送到实时服务器(运行ning IIS8 在 windows 服务器 2012 上的一组 10 台服务器),该网站将根据每个请求重新编译。

如果我转到临时 ASP.NET 文件目录,站点中所有用户控件都有 App_Web dll 以及所有二进制文件的 .delete 文件,我认为这是造成的每次都要重新启动的应用程序域。

App_Web_course.aspx.cdcab7d2.ijbbuqi7.dll
App_Web_course.aspx.cdcab7d2.ijbbuqi7.dll.delete

它偶尔 运行 在某些服务器上正常,当我查看这些服务器上的临时 .NET 文件时,.delete 文件不存在。

我正在拔头发,在 17 年的开发中,我以前从未见过这种情况,而且似乎没有任何韵律或原因。

更新:如果其他人遇到此问题,请查看下面的答案以了解我的解决方案。

可能导致重新编译的原因。

  • 你更新web.config
  • 您 create/delete 根目录下的 app_offline.htm 文件。
  • 您create/modify任何.aspx.aspx.cs文件
  • 您在 App_Code 文件夹中 create/modify 个文件
  • 您让一些上传文件夹无人看管,用户上传 aspx 个文件。
  • 你time/date在电脑上写错了(回头几年)

如果您无法在代码中找到它或不知道其他库的功能,您可以使用 Process Monitor 查看发生了什么。

我有问题的更新和解决方案。

在最初 post 时,我没有注意到文件位于 SMB 网络共享上。由于 ASP.NET.

的 fcnMode,这一直是不断重新编译的原因

Process Monitor 通过 w3wp.exe 为 "FileChangeNotify" 显示了数千个请求,当到达关键目录(例如 "bin" 时,它会导致重新编译和应用程序重新启动。

幸运的是,有一行可以解决这个问题。在项目的 web.config(s) 中,更改以下行以包含以下属性:

<httpRuntime fcnMode="Disabled" />

这将阻止 ASP.NET 扫描您的网络目录以查找不断变化的文件。