Generation dynamique de code

blobette Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 mai 2008 - 25 juil. 2007 à 10:57
blobette Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 mai 2008 - 28 juil. 2007 à 00:05
Bonjour à tous,

Je suis à la recherche d'un moyen pour réaliser la chose suivante en C# : j'aurais une IHM dans laquelle l'utilisateur pourra ecrire en C# des petits programme, utilisant des objets ainsi que des methodes que je lui fournirai. Ce bout de code doit pouvoir être compile dynamement et être stocké de façon à ce que l'ihm puisse permettre d'y accéder et de l'executer ensuite.

J'ai pense que je pourrai peut etre creer dynamiquement des dll, avec des points d'entree implementant tous une interface donnee. Pour accéder dynamiquement depuis mon programme (celui de l'IHM) aux nom des dll dispo (pour pouvoir donner a l'utilisateur la liste des procedures dispo) on m'a parlé des méthodes du namespace "Reflection". Ainsi, j'aurai a récuperer juste le nom de la dll et apres comme les dll créables dans l'ihm implémenteraient toutes la meme interface, je pourrais appeler la procedure principale facilement sans changer mon code.

C'est une theorie, qu'en pensez-vous?
un de mes principaux problemes est que je ne sais pas du tout comment creer dynamiquement une dll avec une interface specifique dedans et tout....

voilou
j'espere que vous pourrez m'eclairer!
merki  

Blobette

<!-- / message -->

4 réponses

cs_Yxion Messages postés 219 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 7 septembre 2009
25 juil. 2007 à 16:35
Si je comprends bien, tu veux que ton app compile du C#... utilise le compilateur du SDK en ligne de commande (csc.exe pour C#)

<hr />
I love .net
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
26 juil. 2007 à 13:49
Hello,

Si tu veux vraiement le faire à la volée, tu peux aussi regarder du côté de Microsoft.CSharp.CSharpCodeProvider et de System.CodeDom.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
26 juil. 2007 à 23:13
salut,

tu as plusieurs techniques possibles :
-> les "macros" en c#/vb.net compilé
-> le principe de plugin : cela nécessite de créer une interface commune mais aussi de développer les plugins avec visual studio...je ne pense pas qu'il soit raisonnable de générer des plugins à la volée...de plus ce n'est pas vraiment le contexte

en fait, tu peux générer des assemblies de plusieurs manières :
-> avec un fichier source préétabli que tu as ou que tu construit à partir de chaines et que tu peux compiler avec Microsoft.CSharp.CSharpCodeProvider
-> tu construis un code c#/vb.net à partir de bout de code (implémentation des méthodes) et tu laisses CodeDom faire la structure du fichier source
-> tu construis directement l'assembly en IL avec System.Reflection.Emit...mais ca c'est plus limité

infos complémentaires :
http://www.divil.co.uk/net/articles/plugins/scripting.asp
http://www.codeproject.com/csharp/csscriptengine.asp
http://www.codeproject.com/csharp/runtime_eval.asp
http://www.techheadbrothers.com/Articles.aspx?Id=1c542078-b10a-4200-9f91-2519f2f64a2b

ShareVB
0
blobette Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 mai 2008
28 juil. 2007 à 00:05
Merci pour ces reponses!


j'ai fait des tests avec cette solution :


"en fait, tu peux générer des assemblies de plusieurs manières :

-> avec un fichier source préétabli que tu as ou que tu construit à partir de chaines et que tu peux compiler avec Microsoft.CSharp.CSharpCodeProvider"  > ShareVB


je pense que je vais faire comme ça!

Merci encore à tous


Blobette
0
Rejoignez-nous