2009-07-09 5 views
2

J'ai une application C#, et je veux exécuter une fonction qui est définie dans le texte pour prendre un paramètre de classe A et retourner un double.Compilation et exécution de code C# par programme

paramètre « A » sera des données structurées, et la fonction sera une formule sur A.

(Imaginez un avait des propriétés num1, num2 et une formule a été définie pour revenir à la moyenne, une autre façon arbitraire à return num1 * 2). En tant que tel, je veux charger ma définition de fonction à partir d'une source de texte, les compiler d'une certaine manière, et les exécuter. En termes de structure du code, je suppose que je pourrais injecter le corps de la fonction pour être une fonction membre d'une classe arbitraire, ou si je peux compiler un délégué puis l'exécuter en passant un contexte de paramètre serait suffisant aussi.

Quelle est la procédure à suivre?

+0

Je pense que vous devez spécifier quelle version de C# vous utilisez. Les versions les plus récentes peuvent le faire plus facilement que les anciennes. – MusiGenesis

+0

ancienne version .NET 1.1 malheureusement. –

Répondre

3
+0

CodeDom est idéal pour ce type de problème. Cependant, si vous avez besoin d'utiliser certaines fonctions plus avancées de C# que CodeDom ne prend pas en charge, vous devriez envisager d'utiliser Reflection.Emit. –

+0

Le lien est cassé ... – Tim

0

Vous pouvez jeter un oeil à la C# dom code. Vous pouvez l'utiliser pour écrire et compiler dynamiquement du code C#, puis l'exécuter.

Attention, il s'agit d'une opération à très haut risque alors soyez prudent. Toujours sa fonctionnalité cool d'avoir dans l'environnement.

0

Il existe une documentation sur la façon de compiler le C# code here.

Une fois que vous avez compilé votre vont devoir utiliser la réflexion pour invoquer la méthode (à condition que sa statique)

Si vous voulez injecter à une classe existante avec LCG vous devez utiliser IL.

0

Une autre approche consiste à utiliser la classe DynamicMethod. Bien que cela nécessite une connaissance de IL pour le faire.

Je suppose que cela serait plus rapide à compiler au moment de l'exécution.

1

Je suggère d'utiliser un analyseur d'expression où vous pouvez entrer une expression semblable à Excel, et inclut toutes les fonctions de base (statistique, manipulation de chaîne, math/trig). J'ai utilisé CalcEngine pour une exigence similaire avec de bons résultats. Vous pouvez l'étendre avec des fonctions personnalisées.

Questions connexes