Generation dynamique de code

Signaler
Messages postés
11
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 mai 2008
-
Messages postés
11
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 mai 2008
-
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

Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

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
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
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)
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
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
Messages postés
11
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
6 mai 2008

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