5

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

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

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

System.Web.HttpException 文件 PAGENAME.aspx 尚未预编译,
并且不能被请求。

堆栈跟踪中的最后一行:

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

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

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

谢谢!

笔记:

  • 我有一些对第三方程序集的引用
  • 我已经检查了登台服务器上的 bin 文件夹。它包含包含所有类的预编译程序集(我使用反射器分析程序集)。
4

2 回答 2

7

所有的 ASPX 文件应该只包含

这是预编译工具生成的标记文件,请勿删除!

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

确保也复制.compiledbin 文件夹中包含的文件。

于 2009-01-05T14:27:48.927 回答
1

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

对于 ASP.NET Web 应用程序中的可执行文件,编译器程序集和具有 .compiled 文件扩展名的文件。程序集名称由编译器生成。.compiled 文件不包含可执行代码。相反,它只包含 ASP.NET 查找适当程序集所需的信息。

After the precompiled application is deployed, ASP.NET uses the assemblies in the Bin folder to process requests. The precompilation output includes .aspx or .asmx files as placeholders for pages. The placeholder files contain no code. They exist only to provide a way to invoke ASP.NET for a specific page request and so that file permissions can be set to restrict access to the pages.

于 2009-01-05T14:55:28.933 回答