预编译的 ASP.NET Web 应用程序:错误“System.Web.HttpException 文件 filename.aspx 尚未预编译,无法请求。”
-
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的方法,因此可以将文件权限设置为限制对页面的访问。
不隶属于 StackOverflow