Code compilé a la volé : CodeDom (ControlScript)
bonsoir a tous
je passe mon application de VB6 en 2005 8O
je cherche beaucoup et trouve peu d'exemple en Vb (pas de souci en C#, mais je ne connais pas)
j'aimerais utiliser la nouvelle mouture de 2005 qui remplace le ScriptControl.
Dans mon appli les utilisateurs saisisent du code pour personnaliser l'apli.
pour comprendre l'utilisation de CodeDom j'aimerais faire compiler en memoire le programme suivant :
a premiere vue ca a l'air d'etre simple :mouarf::mouarf: loin de la
merci de votre contribution
Voici une partie de la reponse!
J'ai créer une Form avec un Bouton et un Textbox
Code:
1 2 3 4 5 6 7 8 9 10 11
| txbScript.Text= "Imports System
Imports Microsoft.VisualBasic
NameSpace Test
Class TestCode
Public Sub Main()
msgbox("hjkh")
msgbox(5*2)
End Sub
End Class
End NameSpace" |
Code du Form :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Private Sub butExecuter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butExecuter.Click
ExecuteCommand1()
End Sub
Private Sub ExecuteCommand1()
Dim vbCodeProv As VBCodeProvider = New VBCodeProvider
Dim cParam As CodeDom.Compiler.CompilerParameters = New CodeDom.Compiler.CompilerParameters
' Ajout des références
cParam.ReferencedAssemblies.Add("System.dll")
' Options du compilateur
cParam.CompilerOptions = "/t:library" 'L'assembly est une bibliothèque de classe,
cParam.GenerateInMemory = True 'générée uniquement en mémoire.
' Résultat de la compilation
Dim cResult As CodeDom.Compiler.CompilerResults = vbCodeProv.CompileAssemblyFromSource(cParam, txbScript.Text)
If cResult.Errors.Count > 0 Then
Dim Errors As String = "Erreur(s) : "
For Each ce As CodeDom.Compiler.CompilerError In cResult.Errors
Errors &= vbCrLf & ce.ErrorText
Next ce
MsgBox(Errors)
End If
' Récupération de l'assembly généré
Dim myAssembly As System.Reflection.Assembly = cResult.CompiledAssembly
End Sub |
Voila quant j'execute et click sur le bouton la compilation en memoire est correcte mais je n'arrive pas a trouver la facon d'ecxecuter ce VB:evilred::evilred::evilred::evilred::evilred:
Pour Ceux qui comprennent les objet System.Reflection et VBCodeProvider : Merci de votre aide