ASP.NET损坏程序集“无法加载文件或程序集App_Web_ *”

时间:2009-04-24 01:02:21

标签: c# asp.net web-deployment-project

我已经阅读了同一问题上发布的许多其他问题,但我仍然不明白原因以及如何防止它发生。

在我的情况下,这发生在生产服务器上。我得到了其他问题中描述的相同错误,我通过将程序集重新复制到bin目录来解决它。它们甚至不是重新编译的文件,它们与之前的文件相同 - 再次复制,然后它开始工作没有问题。

它的奇怪之处在于我使用Web部署项目将所有程序集文件重命名为基于文件夹的dll。所以folder.dll和folder.subfolder.dll而不是App_Web_jt8nxllz.dll。然而,该错误仍然命名原始的App_Web_jt8nxllz.dll文件。

正在删除C:\WINDOWS\Microsoft.NET\Framework[64]\v...\Temporary ASP.NET Files文件夹的内容并且一切正常,但有谁知道如何防止此错误发生?此外,当它在生产服务器上发生时,关闭IIS或重新启动它实际上并不可行。也许自动清理调度程序上的Temp文件夹?

这里真正的问题是什么?有什么特别的东西会导致这种情况发生吗?该网站将毫无问题地嗡嗡作响,然后突然间,整个文件夹停止工作并产生此错误。

Could not load file or assembly 'App_Web_jt8nxllz, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Exception type 'System.IO.FileNotFoundException' was caught.
Source: App_Web_whv5zsvd
Target Site: Void __BuildControlTree(ASP.artists_controls_artistheader_ascx)
Stack Trace:
   at ASP.artists_controls_artistheader_ascx.__BuildControlTree(artists_controls_artistheader_ascx __ctrl)
   at ASP.artists_controls_artistheader_ascx.FrameworkInitialize()
   at System.Web.UI.UserControl.InitializeAsUserControlInternal()
   at System.Web.UI.UserControl.InitializeAsUserControl(Page page)
   at ASP._artists_artist_master.__BuildControlctlArtistHeader()
   at ASP._artists_artist_master.__BuildControlctlContent(Control __ctrl)
   at System.Web.UI.CompiledTemplateBuilder.InstantiateIn(Control container)
   at ASP.master_mysite_master.__BuildControlMainContent()
   at ASP.master_mysite_master.__BuildControlform1()
   at ASP.master_mysite_master.__BuildControlBody()
   at ASP.master_mysite_master.__BuildControlTree(master_mysite_master __ctrl)
   at ASP.master_mysite_master.FrameworkInitialize()
   at System.Web.UI.UserControl.InitializeAsUserControlInternal()
   at System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection)
   at System.Web.UI.MasterPage.get_Master()
   at System.Web.UI.MasterPage.ApplyMasterRecursive(MasterPage master, IList appliedMasterFilePaths)
   at System.Web.UI.Page.ApplyMasterPage()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

3 个答案:

答案 0 :(得分:8)

不只是链接我的网站,但我遇到了这个问题,我写了a blog post on the topic。看看它,它有链接到这个主题的更多信息。但总结一下这里的细节是:

<强>问题:

网站在尝试加载自定义网络控件时出错。您在上一版本中看到,我们向另一个根据需要显示的自定义Web控件添加了一个新的自定义控件。因为最外层/父控件和新的子控件是源中的单独控件,当.Net Framework编译这两个控件中的一个并且不会同时重新编译另一个控件时,您将有一个过时的文件试图引用旧版本的程序集。 .Net框架在编译时将随机字符串附加到程序集名称的事实新编译文件的名称和文件的先前版本导致文件名不匹配,因此外部/父控件正在查找文件不再存在。

可能的解决方法或临时修复:

1)通过在web.config文件中将编译标记的批处理属性设置为false

<compilation debug="false" batch="false" />

2)您还可以通过numRecompileBeforeAppRestart属性设置来减少发生的频率:

<compilation debug="false" numRecompilesBeforeAppRestart="50" />

有关详细信息,请参阅KB Article 934839

已经发生问题的修复:

1)删除临时ASP.Net文件(这会删除网站)

2)强制父/外控制器重新编译,编辑和保存代码文件。对于修复而言,这是比#1更好的选择,因为这不会导致网站崩溃。

我的建议:

1)首先,我认为我们应该从上面实施临时修复#1,这可能会阻止将来的所有问题,并且可能是我们需要的唯一答案。

2)其次,我将在QA环境中从Microsoft下载并安装934839修补程序,以验证它不会导致任何问题。在QA中测试修补程序一段时间之后,我会安装此修补程序以永久修复此问题。这时我们可以删除围绕#1的临时工作。

注意: 放入Temp修复#1后,我再没有遇到问题。我有这个修复已经超过12个月了,一切都很好!

答案 1 :(得分:3)

我遇到了这个,有一个修补程序。

http://weblogs.asp.net/scottgu/archive/2007/04/11/public-hotfix-patch-available-for-asp-net-compilation-issues.aspx

虽然新的机器/设置不再发生。

答案 2 :(得分:0)

清除临时文件或更改web.config对我不起作用。对我来说,修复它的原因是重启我的电脑。