我有一个引用域项目的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?
答案 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"));