我有使用Asssembly.LoadFrom
方法加载程序集的程序。一段时间后,我尝试使用Type.GetType
从该程序集创建一个类型(使用AssemblyQualifiedName
),但该方法返回null
。如果我将其设置为抛出异常,则告诉
无法加载文件或程序集'...' 或其中一个依赖项。系统 找不到指定的文件。
但我确信已经加载完全相同的程序集(它显示在AppDomain.CurrentDomain.GetAssemblies()
列表中)。
任何人都知道可能出现的问题和/或如何解决这个问题?
答案 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
的重载