无法使用预编译的ASP.NET网站项目加载文件或程序集App_Web_ *

时间:2012-04-12 17:14:21

标签: asp.net .net web-site-project precompiled

我在一个非常具体的页面上遇到了这个问题,我不知道如何修复它。 我已经找到了几个SO问题(例如ASP.NET corrupt assembly "Could not load file or assembly App_Web_*"Could not load file or assembly App_Web_xxxxxxxx or one of its dependencies)并尝试了他们的解决方案,但无济于事。

回顾一下,这是我尝试过的:

  • 在web.config中设置batch="false" numRecompilesBeforeAppRestart="50"

  • 重新启动托管此网站的IIS网站

  • 清除%windir%\Framework64\v4.0.30319\Temporary ASP.NET Files

  • 中的ASP.NET临时文件
  • Reployed

......以及上述的任何组合,但无济于事。当我尝试从VS运行网站时以及在没有预编译的情况下部署网站时,它工作得很好。

以下是环境的一些规范:

  • 预编译是通过Web部署项目完成的。如果TFS或我进行预编译并不重要:问题仍然存在

  • .NET版本为4.0.30319

  • AppPool设置:管道模式在.NET 4.0上集成

这是我打开Customer.aspx时发生的特定错误:

Could not load file or assembly 'App_Web_qxcfa0wv, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

此页面已注册名为UserManagement.ascx的控件,位于~/Controls/UserManagement.ascx

该控件已注册另一个名为UserDialog.ascx的控件,该控件位于~/Controls/Dialogs/UserControl.ascx

最后一个控件使用一个名为~/Controls/User.ascx的控件来封装用户的数据。没有进一步的依赖。

根据堆栈跟踪,错误位于UserDialog.ascx<%@ Control ... %>指令)的第1行。

我很茫然。我的 guess 是因为它不起作用,因为~/Controls/Dialogs/UserDialog.ascx需要一个位于父文件夹中的控件,这会在运行时导致一些过时的引用。有点像第一个问题中的问题描述。

但是,我无法仅通过排除~/Controls/User.ascx控件来测试,因为我在~/Control/UserDialog.ascx中使用的另一个控件中得到循环引用错误,即使该控件没有注册任何其他控件。只有命名空间注册,大多数其他控件使用

我会说循环引用和错误是相关的,但我不能说如何。并非没有绘制整个依赖图。

有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

认真地将其转换为Web项目。将库和用户控件与网站模板一起使用时,这是一个已知问题。我在这里总结了一下:

ASP.NET: Web Site versus Web Application Project

有关Rick Strahl博客的更多信息(阅读评论):

Understanding Page Inheritance in ASP.NET 2.0