Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Richiamare metodo con reflections
Forum - C# / VB.NET - Richiamare metodo con reflections

Avatar
amreo (Normal User)
Pro


Messaggi: 93
Iscritto: 18/03/2013

Segnala al moderatore
Postato alle 15:53
Giovedì, 10/04/2014
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 il 10/04/2014 alle 15:55
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 18:27
Giovedì, 10/04/2014
Se non sbaglio dovresti usare la classe Activator http://msdn.microsoft.com/it-it/library/system.activator(v ...

PM Quote
Avatar
amreo (Normal User)
Pro


Messaggi: 93
Iscritto: 18/03/2013

Segnala al moderatore
Postato alle 19:35
Giovedì, 10/04/2014
Non è la soluzione che mi serve :(

inoltre il codice sorgente non lo produco io.
la funzione di compilazione & esegui metodo specificato
Codice sorgente - presumibilmente VB.NET

  1. Public Sub ExecuteScriptM(ByVal PathScript As String, ByVal lang As String, MetodName As String, ParamArray Params() As Object)
  2.         'Crea un nuovo oggetto CompilerParameters, per
  3.         'contenere le informazioni relative alla compilazione
  4.         Dim Parameters As New CompilerParameters
  5.         With Parameters
  6.             'Indica se creare un eseguibile o una libreria di
  7.             'classi: in questo caso ci interessa la seconda,
  8.             'quindi impostiamo la proprietà su False
  9.             .GenerateExecutable = False
  10.  
  11.             'Gli warning vengono considerati come errori
  12.             .TreatWarningsAsErrors = True
  13.             'Non vogliamo tenere alcun file temporaneo: ci
  14.             'interessa solo l'assembly compilato
  15.             .TempFiles.KeepFiles = False
  16.             'L'assembly verrà tenuto in memoria temporanea
  17.             .GenerateInMemory = True
  18.  
  19.             'I due riferimenti di cui abbiamo bisogno, che si
  20.             'trovano nella GAC (quindi basta specificarne il
  21.             'nome). In questo caso, si richiede anche
  22.             'l'estensione (*.dll)
  23.             .ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
  24.             .ReferencedAssemblies.Add("System.dll")
  25.             .ReferencedAssemblies.Add("Logger.dll")
  26.         End With
  27.  
  28.         'Crea un nuovo provider di compilazione
  29.         Dim Provider As CodeDomProvider
  30.         Select Case lang
  31.             Case "vb"
  32.                 Provider = New VBCodeProvider()
  33.             Case "vb.net"
  34.                 Provider = New VBCodeProvider()
  35.             Case "c#"
  36.                 Provider = New CSharpCodeProvider()
  37.             Case "c#.net"
  38.                 Provider = New CSharpCodeProvider()
  39.             Case "js"
  40.                 Provider = New JScriptCodeProvider()
  41.             Case "js.net"
  42.                 Provider = New JScriptCodeProvider()
  43.             Case "javascript"
  44.                 Provider = New JScriptCodeProvider()
  45.             Case "javascript.net"
  46.                 Provider = New JScriptCodeProvider()
  47.             Case Else
  48.                 Throw New Exception("linguaggio sconosciuto")
  49.         End Select
  50.         'E compila il codice seguendo i parametri di
  51.         'compilazione forniti dall'oggetto Parameters. Il
  52.         'valore restituito dalla funzione
  53.         'CompileAssemblyFromSource è di tipo
  54.         'CompilerResults e viene salvato in CompResults
  55.         Dim CompResults As CompilerResults = _
  56.             Provider.CompileAssemblyFromFile(Parameters, PathScript)
  57.  
  58.         'Se ci sono errori, lancia un'eccezione
  59.         If CompResults.Errors.Count > 0 Then
  60.             Throw New FormatException("Errore nello script!")
  61.         Else
  62.             'Altrimenti crea un riferimento all'assembly di
  63.             'output. La proprietà CompiledAssembly di
  64.             'CompResults contiene un riferimento diretto a
  65.             'quell'assembly, quindi ci è molto comoda.
  66.             Dim Asm As Reflection.Assembly = CompResults.CompiledAssembly
  67.             'Dall'assembly ottiene un OT che rappresenta
  68.             'l'unico tipo ivi definito, e da questo ne
  69.             'estrae un MethodInfo con informazioni sul
  70.             End If
  71.        'Esegue la funzione MetodName con parametri Params
  72.        '?????????????????????????????????????????????????????????????????
  73.     End Sub




NB: estratto dalla guida di totem su pierotofy per la reflection.

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 21:52
Venerdì, 11/04/2014
Il metodo MethodName si troverà in una classe, no? Istanziala con Activator

PM Quote