Oppure

Loading
10/04/14 13:53
amreo
ho un assembly precaricata
ho bisogno di richiamare un metodo(con Reflection)
es: "Animale.Verseggia"
dove Verseggia() è un metodo e Animale può essere modulo, classe, namespace o altro.

dato che non so che cosa possono essere(tranne nell' esempio verseggia), come faccio ha eseguirlo.
Ultima modifica effettuata da amreo 10/04/14 13:55
aaa
10/04/14 16:27
GN
Se non sbaglio dovresti usare la classe Activator msdn.microsoft.com/it-it/library/…(v=vs.110).aspx
aaa
10/04/14 17:35
amreo
Non è la soluzione che mi serve :(

inoltre il codice sorgente non lo produco io.
la funzione di compilazione & esegui metodo specificato
    Public Sub ExecuteScriptM(ByVal PathScript As String, ByVal lang As String, MetodName As String, ParamArray Params() As Object)
        'Crea un nuovo oggetto CompilerParameters, per
        'contenere le informazioni relative alla compilazione
        Dim Parameters As New CompilerParameters
        With Parameters
            'Indica se creare un eseguibile o una libreria di
            'classi: in questo caso ci interessa la seconda,
            'quindi impostiamo la proprietà su False
            .GenerateExecutable = False

            'Gli warning vengono considerati come errori
            .TreatWarningsAsErrors = True
            'Non vogliamo tenere alcun file temporaneo: ci
            'interessa solo l'assembly compilato
            .TempFiles.KeepFiles = False
            'L'assembly verrà tenuto in memoria temporanea
            .GenerateInMemory = True

            'I due riferimenti di cui abbiamo bisogno, che si
            'trovano nella GAC (quindi basta specificarne il
            'nome). In questo caso, si richiede anche
            'l'estensione (*.dll)
            .ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
            .ReferencedAssemblies.Add("System.dll")
            .ReferencedAssemblies.Add("Logger.dll")
        End With

        'Crea un nuovo provider di compilazione
        Dim Provider As CodeDomProvider
        Select Case lang
            Case "vb"
                Provider = New VBCodeProvider()
            Case "vb.net"
                Provider = New VBCodeProvider()
            Case "c#"
                Provider = New CSharpCodeProvider()
            Case "c#.net"
                Provider = New CSharpCodeProvider()
            Case "js"
                Provider = New JScriptCodeProvider()
            Case "js.net"
                Provider = New JScriptCodeProvider()
            Case "javascript"
                Provider = New JScriptCodeProvider()
            Case "javascript.net"
                Provider = New JScriptCodeProvider()
            Case Else
                Throw New Exception("linguaggio sconosciuto")
        End Select
        'E compila il codice seguendo i parametri di
        'compilazione forniti dall'oggetto Parameters. Il
        'valore restituito dalla funzione
        'CompileAssemblyFromSource è di tipo 
        'CompilerResults e viene salvato in CompResults
        Dim CompResults As CompilerResults = _
            Provider.CompileAssemblyFromFile(Parameters, PathScript)

        'Se ci sono errori, lancia un'eccezione
        If CompResults.Errors.Count > 0 Then
            Throw New FormatException("Errore nello script!")
        Else
            'Altrimenti crea un riferimento all'assembly di
            'output. La proprietà CompiledAssembly di
            'CompResults contiene un riferimento diretto a
            'quell'assembly, quindi ci è molto comoda.
            Dim Asm As Reflection.Assembly = CompResults.CompiledAssembly
            'Dall'assembly ottiene un OT che rappresenta
            'l'unico tipo ivi definito, e da questo ne
            'estrae un MethodInfo con informazioni sul
            End If
       'Esegue la funzione MetodName con parametri Params
       '?????????????????????????????????????????????????????????????????
    End Sub



NB: estratto dalla guida di totem su pierotofy per la reflection.
aaa
11/04/14 19:52
GN
Il metodo MethodName si troverà in una classe, no? Istanziala con Activator
aaa