【问题标题】:Could not load file or assembly App_Web_ * with a precompiled ASP.NET website project无法使用预编译的 ASP.NET 网站项目加载文件或程序集 App_Web_ *
【发布时间】:2012-04-12 17:14:21
【问题描述】:

我在一个非常具体的页面上遇到了这个问题,我不知道如何解决它。 我已经找到了几个 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临时文件

  • 已回复

... 以及以上任何组合,但无济于事。当我尝试从 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 行。

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

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

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

有什么想法吗?

提前致谢!

【问题讨论】:

  • 服务器上是否存在~/Controls/ 和/或~/Controls/Dialogs/ 目录?
  • @robertc:嗯,我没有检查。显然,~/Controls/ 文件夹存在,但 ~/Controls/Dialogs/ 文件夹不存在。奇怪,因为~/Controls/Lists/ 文件夹确实 存在,但似乎构建它的唯一原因是因为它包含一个 ASPX 页面。在 VS2010 中,~/Controls/Dialogs/ 文件夹仅包含 ASCX 文件,这或许可以解释为什么它在构建中不存在...
  • 参见my similar question - 我最终在每个目录中创建了一个空的placeholder.html 文件,其中只包含ascx 文件,以便在服务器上创建目录。

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


【解决方案1】:

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

ASP.NET: Web Site versus Web Application Project

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

Understanding Page Inheritance in ASP.NET 2.0

【讨论】:

  • 谢谢!我会让你知道结果如何。我们通常不使用 Web 应用程序项目的原因是因为 Web Site 模型具有的 Edit and Continue,但除此之外,我们没有不使用它们的真正原因。我在 Old_App_Code 中有一些控件无法再找到,但无论如何我想将它们移出那里。
  • 这是最好的方法;所有问题都超过了网站模板的好处。
  • Hrm,显然设计器文件已损坏或未正确更新。我在站点范围内搜索并替换了控件,右键单击 Web 应用程序并执行“转换为 Web 应用程序”,但我的设计器文件似乎没有发生任何事情。只有当我触摸有问题的页面/控件时,它才能正确重新生成。我现在可以使用它,但还不能作为 Web 应用程序。
猜你喜欢
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2017-12-23
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多