我正在尝试从一系列程序集中在运行时定位一个类型;我的代码类似于这样:
foreach (Assembly assembly in assembliesToSearch)
{
Type t = assembly.GetType(assemblyName);
if (t != null)
{
return t;
}
}
我的问题是t总是为null。在VS2010中,通过调试器和Intermediate窗口进行实验后,当我在循环内设置断点时发现以下情况:
Type.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
运行正常,但是
assembly.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
当我知道包含我要查找的类的程序集时,使用assembly.GetType()搜索该程序集为何不起作用(在调试器中,我可以在assembly.GetTypes()上设置一个监视点,浏览到我要实例化的类,并调用assembly.GetType("MyNamespace.MyClass, MyNamespace"))。
有没有人知道为什么使用Type.GetType()搜索所有程序集会起作用,但使用assembly.GetType()搜索我知道包含该类型的程序集却不起作用?
MyNamespace.MyClass,MyAssembly
仍然是一个装配限定的类型名。你需要从该字符串中删除程序集名称才能将其与Assembly.GetType()
一起使用。 - adrianbanksType.GetType()
的类型的程序集。“但它是调用堆栈上的程序集”-所以你的意思是一个引用的引用吗?如果是这样,那么我期望会找到它,因为类型解析器将执行递归引用遍历。 - adrianbanksType.GetType()
方法的类型的程序集,但反过来则不然。我想知道答案是否在《Essential .NET Volume 1》中?(这本书没有第二版或第二卷真是太遗憾了!) - davidbak