我有一个包含两个班级的主程序
1-包含两个元素的winform:
最终用户可以在备忘录编辑中键入一些VB.Net代码,然后进行编译。
2 - 一个简单的测试类:
代码:
Public Class ClassTest
Public Sub New()
MsgBox("coucou")
End Sub
End Class
现在我想在将在MemoEdit中输入的代码中使用ClassTest类,然后编译它:
点击编译时我收到错误:
原因是,编译器找不到命名空间ClassTest
总结一下:
有人知道该怎么做吗?
提前感谢您的帮助。
WinForm的代码:
Public Class Form1
Private Sub SimpleButtonCompile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButtonCompile.Click
Dim Code As String = Me.MemoEdit1.Text
Dim CompilerResult As CompilerResults
CompilerResult = Compile(Code)
End Sub
Public Function Compile(ByVal Code As String) As CompilerResults
Dim CodeProvider As New VBCodeProvider
Dim CodeCompiler As System.CodeDom.Compiler.CodeDomProvider = CodeDomProvider.CreateProvider("VisualBasic")
Dim Parameters As New System.CodeDom.Compiler.CompilerParameters
Parameters.GenerateExecutable = False
Dim CompilerResult As CompilerResults = CodeCompiler.CompileAssemblyFromSource(Parameters, Code)
If CompilerResult.Errors.HasErrors Then
For i = 0 To CompilerResult.Errors.Count - 1
MsgBox(CompilerResult.Errors(i).ErrorText)
Next
Return Nothing
Else
Return CompilerResult
End If
End Function
End Class
答案 0 :(得分:1)
以下是解决方案:
如果最终用户想要使用内部类,他应该使用以下命令: Assembly.GetExecutingAssembly
完整的代码将是:
代码:
Imports System.Reflection
Imports System
Public Class EndUserClass
Public Sub New()
Dim Assembly As Assembly = Assembly.GetExecutingAssembly
Dim ClassType As Type = Assembly.GetType(Assembly.GetName().Name & ".ClassTest")
Dim Instance = Activator.CreateInstance(ClassType)
End Sub
End class