Как получить тип из сборки без ссылки? - PullRequest
3 голосов
/ 21 января 2009

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 21 января 2009

Используйте 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"), вы можете использовать Load.

Assembly assembly = Assembly.Load("ProjectX.dll");
Type type = assembly.GetType("NamespaceX.ProjectX.ClassX");
1 голос
/ 21 января 2009

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

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

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

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

...