0

我们遇到了 ASP.Net 运行时编译问题。

在 IIS 启动时(和重新启动后),用户控件和布局编译得很好,没有任何问题。但是在生命周期的某个时刻,运行时编译会停止工作。重新启动 IIS 进程使其再次工作。

在搜索了无数不同的帖子之后,我们做了一些额外的调试,但我们仍然对导致问题的原因感到困惑。

为了保持这一点,我将跳过解释我们所做的所有测试,直接跳到我认为最接近错误核心的地方。

我们已将compilation.tempDirectory 切换到此Web 应用程序专用的自定义文件夹,并且我们设置了一个procmon 来查看此文件夹中的所有文件更改。一旦错误开始发生,我们可以看到临时文件实际上已写入此驱动器,并且 csc.exe 已启动(在此期间,conhost.exe、CcmExec.exe 和许多其他进程),我们在 procmon 中看不到任何错误,但是在 csc.exe 运行之后,它会删除临时文件而不离开编译版本。(并且 asp.net 错误屏幕向我们显示 csc.exe 失败,但不完全是失败的原因)。临时文件都已创建(生成的 dll 除外)- .0.cs、.1.cs、.tmp、.cmdline、.out、.err 都在短时间内全部存在。但是创建后立即又全部删除,应用程序找不到它们。

有没有人知道是什么原因导致该过程运行一段时间后失败?如果我们在 IIS 重新启动后运行它,完全相同的文件编译得很好,但一段时间后,运行时编译期间的某些东西似乎失败了,导致 ASP/w3wp/csc 进程删除临时文件的所有迹象,而不是创建dll,并使功能失败。

4

1 回答 1

0

终于弄清楚是什么导致了我的问题。

我们安装了一个外部模块,它运行另一个第三方 exe 文件来进行一些优化。运行外部程序,在应用程序池标识下启动一个 conhost.exe 进程。

第二个第三方(exe)在某些情况下可能会由于文件锁定而失败,这会导致 exe 以及 conhost.exe 挂起。一旦运行了足够多的 conhost.exe,就不再允许应用程序池启动新的来运行运行时编译。这会导致运行时编译失败,并且 Web 应用程序会自动清理临时文件。

于 2016-07-26T14:37:57.053 回答