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

时间:2009-01-05 14:17:26

标签: asp.net deployment precompiled

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

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

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

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来分析程序集)。

2 个答案:

答案 0 :(得分:7)

所有ASPX文件只应包含

  

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

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

确保复制bin文件夹中包含的.compiled文件。

答案 1 :(得分:1)

为了记录,我忘了复制这些“.compiled”文件(MSDN documentation: File Handling During ASP.NET Precompilation):

  

用于ASP.NET Web中的可执行文件   应用程序,编译器程序集   和.compiled文件名的文件   延期。程序集名称是   由编译器生成。该   .compiled文件不包含   可执行代码。相反,它包含   只有ASP.NET的信息   需要找到合适的   组装

     

预编译的应用程序之后   部署后,ASP.NET使用程序集   在Bin文件夹中处理请求。   预编译输出包括   .aspx或.asmx文件作为占位符   用于页面。占位符文件   不包含任何代码。它们只存在于   提供一种调用ASP.NET的方法   特定页面请求以及该文件   权限可以设置为restrict   访问页面。