我试图从名称中创建一个类的实例。如果类在同一个程序集中,它就可以工作。但是如果该类是从另一个程序集导入的,那么即使我指定了该类的全名,它也会失败。
我创建了一个Class1类,并将它放在类库MyClass.dll
中Public Class Class1
Public Sub sayHi()
MessageBox.Show("Hi")
End Sub
End Class
然后我创建了一个'测试'具有表单' TestForm'的项目,上面有一个按钮。在按钮的单击方法中,我尝试创建Class1
的实例Imports System.Reflection
Imports MyClass
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim className As String = "MyClass.Class1"
Dim classType As Type = Type.GetType(className)
Dim obj As Object= Activator.CreateInstance(classType)
...
line2中返回的classType始终没有,所以line3会失败。但是,如果我把Class1放在同一个'测试'项目,并做
Dim className as String = "Test.Class1"
事情很好。 '测试'项目可以看到班级" MyClass.Class1" (我确认它是正确的全名),但无法获得其类型,为什么?我在XP机器上使用VS2008。
答案 0 :(得分:0)
这是可以帮助您的代码:
Dim act As Reflection.Assembly = Reflection.Assembly.LoadFile("You outside class .dll Path")
Dim Your_Class_is_here As New Object
For Each ty In act.ExportedTypes
If ty.Name = "Class1" Then
Your_Class_is_here = act.CreateInstance(ty.FullName)
End If
Next
Your_Class_is_here.sayHi()
我已经在我自己的项目中测试了它并且它正在工作* _ ^
注意:如果您使用此代码,则无需导入或向您的测试项目添加该DLL的引用。
快乐编码^^