【问题标题】:Compilation Error after Successful Publish of ASP.NET(4.0) Web Application成功发布 ASP.NET(4.0) Web 应用程序后的编译错误
【发布时间】:2012-02-19 12:43:07
【问题描述】:

我的 Web 应用程序构建和发布成功,将文件复制到 Web 服务器后出现问题,当我尝试浏览多个页面时出现编译错误,但其他页面继续正常运行。

我的第一个想法是某些文件可能没有被成功复制,所以我重新发布并测试了该页面,一切似乎都很好,直到我检查了另一个页面,该页面一直在使用以前的发布,现在出现同样的问题随后的发布也看到了类似的效果,受影响的页面每次都会发生变化。

Web 服务器上出现故障的页面之前在 Web 服务器上正常运行,并没有针对此次发布进行更改,并且在 Visual Studio 2010 Debug 中继续正常工作。

我已经回收了应用程序池重启了网站并重启了服务器。

我们的错误日志中的错误是:

GAE:: System.Web.HttpException (0x80004005): The file /XXXX.aspx has not been pre-compiled, and cannot be requested.     
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)

编辑:我已经复制了其中一个失败页面(重命名类)的源 aspx 和 cs 文件,并将其重新发布为解决方案。新页面与失败的页面并存。

【问题讨论】:

标签: asp.net iis-7


【解决方案1】:

可能与文件或 IO 相关。您是否复制了所有文件,而不仅仅是二进制文件?您可以尝试删除所有旧文件(先备份),以免出现写保护或安全问题。

【讨论】:

  • 复制所有文件 - 这是一个已经运行了 3 年以上的现有网站,并且发布方法保持不变。我目前正在清理一个测试站点,我们也用它来进行另一个测试。
  • 我在 IIS 中使用了一个单独的站点,复制了原始的所有设置并将所有已发布的文件复制到该位置 - 出现了相同的症状。
  • 对不起,没有线索。也许服务器上缺少程序集?
【解决方案2】:

这个错误可能是一个红鲱鱼,通常掩盖真正的错误。

第一次检查 IIS 应用、物理目录和受影响文件的权限是否正确。

如果不是权限,请将自定义错误设置为仅在网络服务器上的 RemoteOnly 并重新发布。在 .net 4 中,发布应用并勾选以下选项,“允许预编译的站点可更新”和“使用固定的命名约定和单页程序集”

当部署到网络服务器时,您应该会发现现在报告的正确问题,这将是缺少自定义或 3rd 方程序集,这可能是最近添加和删除的,或者过去的爆炸再次抬头,没有明显的原因(这是我们的问题,程序集没有以任何形式使用,但在配置文件中定义,因此取消了几种形式)

希望这可以帮助您解决问题 - 祝您好运!

【讨论】:

  • 谢谢 - 我们在 web.config 中找到了问题,它引用了一个旧的现在使用的 web 控件,该文件的 dll 在最近的一次内务工作中被删除了,但是 web.config现场错过了条目。
【解决方案3】:

我有同样的问题。

有些页面在发布后尝试打开时会抛出错误。

对我有用的一个解决方案是..当我检查那些显示错误的 aspx 文件时,有 CodeFile 而不是 CodeBehind...

我从 CodeFile 更改为 CodeBehind,它运行良好。 (不知道是否是因为 CodeBehind 单独在 bin 目录中可用的原因。我是新手,可能这个原因不正确。如果我错了,请纠正我)

但问题是,在 localhost 上,某些文件在保留为 CodeBehind 时会引发错误。

【讨论】:

    【解决方案4】:

    我在 VS2017 和一个已经运行了很长时间的应用程序中遇到了同样的问题。

    该应用程序过去是通过 XCOPY 部署而不发布。切换到发布方法后,出现了错误。 经过一番研究,我们发现在生产中,web.config 中仍然有一个配置文件条目,而在开发中它已经被删除了,因为不再需要它了。

    在 web.config 中取消注释节点配置文件后,应用程序已启动并正在运行。

    在部署时,我们还删除了除 APP_DATA 和 web.config 之外的所有文件。

    【讨论】:

      【解决方案5】:

      我认为这个线程可能是相关的:

      How to fix ASP.NET error "The file 'nnn.aspx' has not been pre-compiled, and cannot be requested."?

      如上所述,我们的解决方案是删除以下所有文件:

      C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root
      

      【讨论】:

        【解决方案6】:

        我知道这个问题很老,但是如果有人遇到这个问题,在使用版本、文件等之前,我可以建议先清理项目吗?经过非常紧张的一天,这就是解决我的问题的原因。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-11
          相关资源
          最近更新 更多