【发布时间】:2010-11-07 21:30:26
【问题描述】:
我的 ASP.NET 应用程序通过在完全限定的字符串引用上使用 Type.GetType() 并像您一样实例化该类型的对象来利用“模块”系统。
但是,最近它在无法找到类型时抛出异常 - 但只是偶尔。我无法随意复制,但它通常发生在对非 bin 相关的东西(如母版页或 ASCX 标记)进行简单更改之后。在我重建站点或重新启动 IIS 之前,它不会自行排序。对 web.config 进行更改并不能修复它。
在 web.config 中添加对程序集的显式引用而不是希望在 bin 目录中找到它可以减少问题的发生,但不能完全阻止它的发生。不知何故,某个地方认为删除我的程序集是个好主意。
我已经调试到它无法找到类型并且足够正确的地方,尽管在上一页加载时在那里,程序集似乎从Thread.GetDomain().GetAssemblies() 中消失了。显然,当应用程序处于活动状态时,我不能冒险发生这种情况,所以我在 DLL 上手动调用了Assembly.LoadAssembly(),我知道它只需要看看是否值得创建一个尝试定位程序集的方法。这也不起作用,因为当我尝试使用该类时它引发了以下错误:
[A]xxx.Modules.CustomCaseStudy 不能 被投到 [B]xxx.Modules.CustomCaseStudy。 A型 源自'xxx.Modules, 版本=1.0.0.0,文化=中性, PublicKeyToken=null' 在上下文中 'LoadNeither' 在位置 'C:\Development\xxx\xxx.Web\bin\xxx.Modules.dll'。 B型源自'xxx.Modules, 版本=1.0.0.0,文化=中性, PublicKeyToken=null' 在上下文中 位置的“默认” 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\fff474e0\8c6aec7e\assembly\dl3\325b4335\009dbd67_b2fbc901\xxx.Modules.DLL'。
一直以来,所需的 DLL 都在 bin 文件夹中,等待 - 不,乞求使用,更不用说 web.config 中的显式引用了。
任何有关追踪罪魁祸首的信息,甚至作为最后的手段如何将该程序集加载到“默认”上下文中,将不胜感激!
【问题讨论】:
标签: asp.net assemblies