GetType для класса в ссылочной сборке завершается неудачно - PullRequest
3 голосов
/ 10 февраля 2010

У меня есть веб-проект asp.net, который ссылается на проект домена.

В рамках веб-проекта я хочу создать экземпляр класса из проекта домена, используя отражение, но я всегда получаю нулевое значение (Nothing, в VB).

ПРИМЕЧАНИЕ. Я использую неполное имя класса и надеялся, что поиск будет выполнен, поскольку MSDN, кажется, указывает (на уровне сборки)

Dim myType as Type = Type.GetType ("MetricEntity") '// ничего не дает (Null)

  '// lets try this
  Dim WasFound As Boolean = False
  For Each ObjectType In Me.GetType.Assembly.GetExportedTypes
    If ObjectType.Name = theClassName Then
      WasFound = True
      Exit For
    End If
  Next

Ответ на этот вопрос, как правило, выглядит следующим образом:

Dim myType as Type = Type.GetType("System.Linq.Enumerable, System.Core, " 
     + "Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")); 

Но я не вижу логики необходимости жестко кодировать номер версии (или помещать его в файл конфигурации) .... так что произойдет, если версия изменится, и я забуду обновить ее в коде отражения. .... возможно ли сделать GetType, игнорируя Version, Culture и PublicKeyToken?

Ответы [ 2 ]

5 голосов
/ 10 февраля 2010

Вы можете получить тип по имени, если у вас есть сборка, в которой он находится. Это сработает для вас?

Таким образом, вы можете указать имя сборки отдельно от типов, к которым вы пытаетесь получить доступ.

Assembly assembly = typeof(System.Linq.Enumerable).Assembly;
Type type = assembly.GetType("System.Linq.Enumerable");
2 голосов
/ 10 февраля 2010

Вы можете сделать что-то вроде этого, игнорируя эти атрибуты:

Dim myType as Type = Type.GetType("System.Linq.Enumerable")); 

или

Dim myType as Type = Type.GetType("System.Linq.Enumerable, System.Core")); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...