我试图从程序集列表中查找运行时的类型;我的代码是这样的:为什么Type.GetType()工作和Assembly.GetType()不起作用?
foreach (Assembly assembly in assembliesToSearch)
{
Type t = assembly.GetType(assemblyName);
if (t != null)
{
return t;
}
}
,而我的问题是,t总是会出现为空。与调试器和VS2010中级窗口中播放的时候,我注意到当我把一个断点在循环中执行以下操作:
Type.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
工程确定,但
assembly.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
不(装配时是我知道的程序集包含我正在寻找的类 - 在调试器中,我可以在assembly.GetTypes()上放置一个监视器,浏览到我尝试实例化的类,并调用assembly.GetType(“MyNamespace.MyClass ,MyNamespace“))。
有谁知道为什么使用Type.GetType()搜索所有程序集的作品,但搜索我知道的程序集包含使用assembly.GetType()类型不?
感谢您的回应;我最初的代码示例没有清楚地显示出来,但是在我的循环中,我调用了Type t = assembly.GetType(assemblyName),assemblyName是“MyNamespace.MyClass,MyAssembly”,所以通过我的计算,它应该返回预期类型。 –
@David:'MyNamespace.MyClass,MyAssembly'仍然是一个程序集限定的类型名称。您需要从该字符串中删除程序集名称以使其与'Assembly.GetType()'一起使用。 – adrianbanks
@adrianbanks - 你在哪里学习的“Type.GetType()很可能会使用当前程序集的引用来解析类型” - 它似乎不在[MSDN here]中(http:// msdn .microsoft.com/EN-US /库/ w3f99sx1(v = vs.110)的.aspx)。另外,什么是“当前组装”?在我现在看的情况下,装配的类型 - 这是发现! - 不是具有当前执行方法的程序集,也不是它的引用,但它是调用堆栈上的程序集。(我的问题的原因:我的程序集名称中的版本是错误的,但找到了类型。) – davidbak