无法在不同的命名空间中从类名创建类的实例

时间:2015-01-08 21:35:29

标签: vb.net visual-studio-2008

我试图从名称中创建一个类的实例。如果类在同一个程序集中,它就可以工作。但是如果该类是从另一个程序集导入的,那么即使我指定了该类的全名,它也会失败。

我创建了一个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。

1 个答案:

答案 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的引用。

快乐编码^^