ScriptControl VSA CodeDom

EMMANUELTAVE Messages postés 22 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 3 janvier 2008 - 30 déc. 2007 à 22:15
divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 - 3 janv. 2008 à 08:01
bonsoir a tous

je suis en train de passer une application de VB6 a VB2005.
J'utilisais avant le ScriptControl pour que mes utilisateur puisse personnonaliser mon application (acces a des objet, methode, fonction, propriété ....)

le ScriptControl n'étant plus a la "Mode" j'ai trouver de nouvelles techniques :

VSA et CodeDom

Quelqu'un peut il me dire quelles sont les differences et qu'elle technique utiliser plutot qu'une autre

ps: j'ai vu que CodeDom peut compiler des application a la volée, mais je veux que mon application executer seulement des scripts.

Merci
le gros mangeur de paté

2 réponses

EMMANUELTAVE Messages postés 22 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 3 janvier 2008
3 janv. 2008 à 01:52
Voila j'ai trouvé une partie de mon boheur :

J'ai créer une Form avec un Bouton et un Textbox




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"






voici le code du form :






Private
Sub butExecuter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butExecuter.Click
   ExecuteCommand1()
EndSub
 
PrivateSub 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 > 0Then
       Dim Errors AsString = "Erreur(s) : "
       ForEach ce As CodeDom.Compiler.CompilerErrorIn cResult.Errors
        Errors &= vbCrLf & ce.ErrorText
       Next ce
       
      MsgBox(Errors)
    EndIf
 
   ' Récupération de l'assembly généré
   Dim myAssembly As System.Reflection.Assembly = cResult.CompiledAssembly
EndSub







 


C'est cool car la compilation en memoire est correcte !!




 Mais je ne trouve pas la solution pour executer le code du textBox








Pour Ceux qui comprennent les objet System.Reflection et VBCodeProvider merci de votre aide

le gros mangeur de paté
0
divadav Messages postés 94 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 22 janvier 2009 2
3 janv. 2008 à 08:01
Il te manque cette ligne : cParam.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
J'avais pas fait gaffe à ton post, j'ai répondu sur ma source !!

En fait, si tu veut tester du code dans Visual Studio, comme si tu l'exécutait avec CodeDom, il faut que tu fasses un nouveau projet, et que tu commence par retirer toutes les références et les espaces de noms importés (clic-droit sur ton projet, propriétés, onglet Références : tout se trouve là !)

Une fois que tu as fait ça, tu peux commencer à ajouter les assemblies que tu veux référencer, puis écrire ton code avec les imports qui vont bien... C'est un des problèmes de VS : il importe de lui même certains espaces de noms, de manière transparente pour le développeur, du coup, on a un peut l'impression qu'une fonction comme MsgBox() sort de nulle part, alors que c'est l'IDE qui a importé tout ce qu'il fallait pour que ça marche, sans rien dire !

<hr size="2" width="100%" />Divad
Techniques de Web Design, Traductions d'articles sur le Web Design, Astuces .Net
0
Rejoignez-nous