引用程序集中的类上的GetType失败

时间:2010-02-10 00:13:45

标签: .net reflection

我有一个引用域项目的asp.net Web项目。

在Web项目中,我想使用反射从域项目创建一个类的实例,但我总是得到null(Nothing,在VB中)。

注意:我使用的是非完全限定的类名,并且希望在MSDN似乎指示的情况下执行搜索(在程序集级别)

将myType调暗为Type = Type.GetType(“MetricEntity”) '//产生无(空)

  '// 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 个答案:

答案 0 :(得分:5)

如果你有装配,你可以单独按名称获得一个类型。这对你有用吗?

这样,您可以在与您尝试访问的类型不同的位置指定程序集名称。

Assembly assembly = typeof(System.Linq.Enumerable).Assembly;
Type type = assembly.GetType("System.Linq.Enumerable");

答案 1 :(得分:2)

您可以执行以下操作,忽略这些属性:

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

或:

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