代码之家  ›  专栏  ›  技术社区  ›  tbone

引用程序集中类的getType失败

  •  3
  • tbone  · 技术社区  · 15 年前

    我有一个引用域项目的ASP.NET Web项目。

    在web项目中,我想使用反射从域项目创建一个类的实例,但是我总是得到空值(vb中没有)。

    注意:我使用的是非完全限定类名,并希望按照msdn的指示执行搜索(在程序集级别)

    dim mytype as type=type.gettype(“度量值”) '//不产生任何结果(空)

      '// 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,忽略版本、区域性和publickeytoken?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Nick Craver    15 年前

    您可以这样做,忽略这些属性:

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

    或:

    Dim myType as Type = Type.GetType("System.Linq.Enumerable, System.Core")); 
    
        2
  •  5
  •   Sam Harwell    15 年前

    如果有一个类型所在的程序集,则可以仅按名称获取该类型。那对你有用吗?

    这样,您就可以在一个独立的位置指定程序集名称,而不是指定要访问的类型。

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