Как получить тип из сборки без ссылок?

GetType () возвращает значение null, если тип существует в сборке, на которую нет ссылки. Например, когда следующее называется localType, всегда имеет значение NULL (даже при использовании полного имени пространства имен класса):

Type localType = Type.GetType("NamespaceX.ProjectX.ClassX");

Я не вижу причин, по которым Type.GetType не может получить тип из сборки, на которую нет ссылки, поэтому

Как можно получить тип сборки без ссылки?


person Don Music    schedule 20.01.2009    source источник
comment
В случае использования Load вам не нужен .dll, просто имя ...   -  person    schedule 13.07.2011


Ответы (2)


Используйте LoadFrom, чтобы загрузить сборку без ссылки из ее местоположения. Затем вызовите GetType.

Assembly assembly = Assembly.LoadFrom("c:\ProjectX\bin\release\ProjectX.dll");
Type type = assembly.GetType("NamespaceX.ProjectX.ClassX");

Если сборка для загрузки находится в закрытом пути сборки, из которой вы загружаете (например, "c: \ ProjectY \ bin \ release \ ProjectX.dll"), вы можете использовать _ 4_.

Assembly assembly = Assembly.Load("ProjectX.dll");
Type type = assembly.GetType("NamespaceX.ProjectX.ClassX");
person Anthony Mastrean    schedule 20.01.2009
comment
Я думаю, Load следует правилам здесь ... stackoverflow.com/questions/49972 - person Anthony Mastrean; 21.01.2009

Из документации MSDN

Если запрошенный тип не является общедоступным и у вызывающего объекта нет ReflectionPermission для отражения непубличных объектов за пределами текущей сборки, этот метод возвращает значение null.

Это также указывает на то, что null будет возвращен, если сборка не загружена с диска.

Один из способов решения проблемы - загрузить сборку и затем напрямую использовать методы GetType для сборки. По общему признанию, из документации это звучит так, как будто это должно было вызвать исключение, если проблема заключалась в загрузке сборки.

person toad    schedule 20.01.2009