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