【发布时间】: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