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

InformationsquelleAutor Vamsi | 2011-02-01
Schreibe einen Kommentar