Из документов MSDN для этих двух методов Type.GetType()
ожидает имя типа * 1005 с указанием сборки, тогда как Assembly.GetType()
ожидает полное название типа . Это не одно и то же.
typeof(MyNamespace.MyClass).AssemblyQualifiedName
оценивается как имя типа, уточненное сборкой (что-то вроде MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral
), поэтому оно не работает с вызовом Assembly.GetType()
, который ожидает строку в формате MyNamespace.MyClass
.
Вероятно, это связано с тем, что когда вы передаете полное имя сборки вызову Assembly.GetType()
, он ищет тип в сборке, полное имя которого соответствует указанному вами. Он не может его найти, поэтому вы получите null
возвращено. Это не относится к вызову Type.GetType()
, так как он ожидает получить имя типа с указанием сборки и может найти как сборку, так и тип.
Что стоит отметить:
Если вы «пытаетесь найти тип во время выполнения из списка сборок», как вы говорите, вам, вероятно, лучше использовать вызов Assembly.GetType()
для каждой сборки в списке и передавать полное имя типа. Type.GetType()
, скорее всего, будет использовать ссылки текущей сборки для разрешения типа, поэтому, если тип существует в сборке, которая не является ссылкой, он не будет найден.