Asp.net网站不会在Windows更新后运行,编译错误"临时ASP.NET文件"

时间:2014-04-23 15:09:24

标签: asp.net iis-7.5 windows-server-2008-r2

我们在其中一台生产机器上运行了Windows更新。 在此之后,我们所有的asp.net应用程序都停止了工作并给了我们以下错误

System.Web.HttpCompileException (0x80004005): C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\4a73fd31\133ab85b\App_Web_list.aspx.73bf660c.oobh7mac.0.vb : (0): error BC31007: Unable to open module file 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\4a73fd31\133ab85b\App_Web_list.aspx.73bf660c.oobh7mac.0.vb': System Error &Hc0000005& (Visual Basic internal compiler error)
   at System.Web.Compilation.AssemblyBuilder.Compile()
   at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
   at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
   at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
   at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

搜索几分钟后,我找到了一个解决方案,将apppool运行的用户从ApplicationPoolIdentity更改为LocalSystem。

这解决了这个问题,但我觉得我们的应用程序不能像LocalSystem那样运行。

我试图比较" Temporary ASP.NET Files"和"临时ASP.NET文件\ root"一台健康的机器,却找不到任何差异。

有谁知道如何解决这个问题?

编辑: 当我们尝试访问页面而不是在我们尝试编译它时会发生此问题!

3 个答案:

答案 0 :(得分:3)

我找到了一个解决方案,我对IIS_USERS提供了C:\Windows\Temp完全访问权限。

答案 1 :(得分:2)

昨天也开始在 Windows Server 2003 上使用网站遇到同样的问题,这些网站过去在NETWORK SERVICE帐户下工作了很久。
NETWORK SERVICE(在您的情况下为ApplicationPoolIdentity)具有完全控制权限 C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files

以下是解决此问题的步骤:

  1. 。安装更新后,您的服务器上可能会破坏.Net框架 尝试使用“Microsoft”修复.Net Framework4.0 .NET Framework修复工具“ http://www.microsoft.com/en-us/download/details.aspx?id=30135。 .NET Framework修复工具将诊断和修复.NET Framework 4问题
  2. 回收应用程序池。 从C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files中删除所有已编译的库 这将推动编译器重新编译它动态编译的所有代码,以防万一有一些损坏或被其他一些进程程序集锁定。

答案 2 :(得分:1)

我有类似的情况,我花了几个小时试图解决。在我的情况下,我在Windows 2008R2框上运行。我试图搞乱临时文件安全性,重新安装.net4框架,重启等无济于事。

我经历的最后一步是创建一个全新的应用程序池 - 使用与旧的相同的设置,然后将网站设置为使用新的应用程序池,最后删除旧的应用程序池。

我可以推测的是,有关IIS,.net3,.net4和各种Windows更新导致应用程序池损坏的顺序的问题"某种程度上来说。希望这个金块对某人有用。