预编译的 ASP.NET Web 应用程序:错误“System.Web.HttpException 文件 filename.aspx 尚未预编译,无法请求。”

StackOverflow https://stackoverflow.com/questions/413221

  •  03-07-2019
  •  | 
  •  

我使用 Visual Studio 2008 模板为 ASP.NET 3.5 Web 应用程序(不是网站)创建了一个 Web 部署项目。

我编译了创建部署所需文件的项目。我将生成的文件夹(bin、静态文件和所有带有 aspx 占位符的文件夹等)复制到我想要测试应用程序的临时服务器。

如果我 标记该选项 “允许此预编译站点可更新”, ,我在浏览器中加载的每个页面上都会收到此错误消息:

System.Web.HttpException file PAGENAME.aspx has not been pre-compiled, 
and cannot be requested.

堆栈跟踪中的最后一行:

System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(
  VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, 
  Boolean allowBuildInPrecompile) +8756366

如果我检查该选项,一切都很好(我猜是因为实际的 aspx/ascx 仍然以其原始形式存在)。

知道我在这里缺少什么吗?是否有一些我忘记复制的设置或特殊文件?

谢谢你!

笔记:

  • 我有一些对第三方程序集的引用
  • 我已经检查了临时服务器上的 bin 文件夹。它包含预编译的程序集,其中包含所有类(我使用 Reflector 来分析程序集)。
有帮助吗?

解决方案

所有 ASPX 文件应仅包含

这是由预编译工具生成的标记文件,不应删除!

删除 bin 文件夹中的所有内容并再次发布网络。确保从进行发布的目录中获取文件。

确保您复制了 .compiled bin 文件夹中也包含文件。

其他提示

作为记录,我忘记复制这些“.compiled”文件(MSDN 文档:ASP.NET 预编译期间的文件处理):

对于ASP.NET Web应用程序中的可执行文件,使用.compiled文件名扩展程序的编译器组件和文件。组件名称由编译器生成。.compiled文件不包含可执行的代码。相反,它仅包含ASP.NET需要找到合适的组件的信息。

部署预编译应用程序后,ASP.NET使用bin文件夹中的程序集来处理请求。预编译输出包括.aspx或.ASMX文件作为页面的占位符。占位符文件没有代码。它们仅是为了提供特定页面请求的ASP.NET的方法,因此可以将文件权限设置为限制对页面的访问。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top