Wie man die Namen von Variablen, Typen, und Werte in die aktuelle Klasse oder Methode in VB.net?
Hi
Ich arbeite an einem Projekt, wo meine Klasse ist zum ausführen von VB-code durch den Benutzer bereitgestellt werden, es einfach zu machen ich versuche meine eigene eval-Funktion, ich bin mit dem folgenden code, den ich auf dem web gefunden werden, um diese Aufgabe
Imports Microsoft.VisualBasic
Imports System
Imports System.Text
Imports System.CodeDom.Compiler
Imports System.Reflection
Imports System.IO
Namespace PAB.Util
Public Class EvalProvider
Public Function VS_Eval(ByVal vbCode As String) As Object
Dim c As VBCodeProvider = New VBCodeProvider
Dim icc As ICodeCompiler = c.CreateCompiler()
Dim cp As CompilerParameters = New CompilerParameters
cp.ReferencedAssemblies.Add("system.dll")
cp.ReferencedAssemblies.Add("system.xml.dll")
cp.ReferencedAssemblies.Add("system.data.dll")
' Sample code for adding your own referenced assemblies
'cp.ReferencedAssemblies.Add("c:\yourProjectDir\bin\YourBaseClass.dll")
'cp.ReferencedAssemblies.Add("YourBaseclass.dll")
cp.CompilerOptions = "/t:library"
cp.GenerateInMemory = True
Dim sb As StringBuilder = New StringBuilder("")
sb.Append("Imports System" & vbCrLf)
sb.Append("Imports System.Xml" & vbCrLf)
sb.Append("Imports System.Data" & vbCrLf)
sb.Append("Imports System.Data.SqlClient" & vbCrLf)
sb.Append("Namespace PAB " & vbCrLf)
sb.Append("Class PABLib " & vbCrLf)
sb.Append("public function EvalCode() as Object " & vbCrLf)
'sb.Append("YourNamespace.YourBaseClass thisObject = New YourNamespace.YourBaseClass()")
sb.Append(vbCode & vbCrLf)
sb.Append("End Function " & vbCrLf)
sb.Append("End Class " & vbCrLf)
sb.Append("End Namespace" & vbCrLf)
Debug.WriteLine(sb.ToString()) ' look at this to debug your eval string
Dim cr As CompilerResults = icc.CompileAssemblyFromSource(cp, sb.ToString())
Dim a As System.Reflection.Assembly = cr.CompiledAssembly
Dim o As Object
Dim mi As MethodInfo
o = a.CreateInstance("PAB.PABLib")
Dim t As Type = o.GetType()
mi = t.GetMethod("EvalCode")
Dim s As Object
s = mi.Invoke(o, Nothing)
Return s
End Function
End Class
End Namespace
Das problem mit dem code ist, dass er nicht Zugriff auf alle Variablen oder gibt es Werte, so habe ich beschlossen, um die Variablen-Namen, gibt es Werte, Typen und es gibt Typen, die dynamisch und erstellen Sie in der Klasse, die erstellt wird, dynamisch.
Bitte einen Weg vorschlagen, um die Variablen-Namen gibt es Typen, und Werte in die aktuelle Klasse oder Methode, so dass ich Sie neu erstellen, und führen Sie den Benutzer-code übergeben, der Benutzer weiß, was Variablen sind, die in die aktuelle Klasse oder Methode und es Datentypen, aber er weiß nicht, gibt es Werte, wie Sie geändert haben kann, so kann er nicht initialisieren.
Gibt es eine Möglichkeit, dies zu tun, dieser code wird aufgerufen, in einer asp.net Seite auf page_load-Ereignis den code übergeben, indem der Benutzer wird in der Variablen gespeichert vbCode, der als parameter übergeben wird.
Wenn es irgendeine andere Methode, dies zu tun, Sie schlagen
Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich endlich die Lösung gefunden, wie man die Variablen und die Werte der aktuellen Instanz einer Klasse.
mit
System.Reflection;
es ist sehr leicht zu erreichen, alles, was Sie schreiben, ist die folgende Zeile:Hinweis : Es funktioniert nur für die public-Variablen
Diese kann Ihnen helfen?