Type.GetType无法从已加载的程序集创建类型

时间:2010-10-24 17:18:08

标签: c# .net reflection assemblies

我有使用Asssembly.LoadFrom方法加载程序集的程序。一段时间后,我尝试使用Type.GetType从该程序集创建一个类型(使用AssemblyQualifiedName),但该方法返回null。如果我将其设置为抛出异常,则告诉

  

无法加载文件或程序集'...'   或其中一个依赖项。系统   找不到指定的文件。

但我确信已经加载完全相同的程序集(它显示在AppDomain.CurrentDomain.GetAssemblies()列表中)。

任何人都知道可能出现的问题和/或如何解决这个问题?

2 个答案:

答案 0 :(得分:11)

为了理解为什么这不起作用,您需要了解“加载上下文”的问题。 Type.GetType仅查看“加载”上下文。您加载到内存中的程序集位于“LoadFrom”上下文中。

在load-context中真正获取绑定以查看load-from上下文中的程序集的唯一方法是使用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

答案 1 :(得分:6)

如果您可以使用Assembly.LoadFrom获取程序集,那么您可以通过执行以下操作获取类型:

        Assembly assembly = Assembly.LoadFrom("whatever");
        Type myType = assembly.GetType("typeName")

assembly.GetType有其他重载,你可以找到关于here

的重载