Type.GetType无法从已加载的程序集创建类型
我有程序使用Asssembly.LoadFrom
方法加载程序集。 一段时间后,我尝试使用Type.GetType
从该程序集创建一个类型(使用AssemblyQualifiedName
),但该方法返回null
。 如果我将它设置为抛出exception,它会告诉我
无法加载文件或程序集“…”或其依赖项之一。 该系统找不到指定的文件。
但我确信已经加载完全相同的程序集(它显示在AppDomain.CurrentDomain.GetAssemblies()
列表中)。
任何人都知道可能出现的问题和/或如何解决这个问题?
为了理解为什么这不起作用,您需要了解“加载上下文”的问题。 Type.GetType仅查看“加载”上下文。 您加载到内存中的程序集位于“LoadFrom”上下文中。
真正在加载上下文中绑定以查看加载来自上下文中的程序集的唯一方法是使用AssemblyResolve事件并编写代码以返回正确的程序集。 AssemblyResolve事件在绑定失败之前触发,并且所有其他程序集查找都没有成功。
有关加载上下文和使用LoadFrom时出现的问题的详细信息,请参阅以下链接。
MSDN – http://msdn.microsoft.com/en-us/library/dd153782.aspx
AssemblyResolve – http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx
Suzanne Cook – http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx
如果您可以使用Assembly.LoadFrom获取程序集,那么您可以通过执行以下操作获取类型:
Assembly assembly = Assembly.LoadFrom("whatever"); Type myType = assembly.GetType("typeName")
assembly.GetType有其他重载,你可以在这里找到