2010-03-16 12 views
1

Je dois analyser une instruction simple (essentiellement une chaîne d'appels de fonction sur un objet) représentée comme une variable chaîne dans un objet CodeDom (probablement une sous-classe CodeStatement). Je voudrais également fournir quelques importations par défaut d'espaces de noms pour pouvoir utiliser des instructions moins verbeuses.Comment analyser une instruction simple dans l'objet CodeDom

J'ai regardé autour de SO et d'Internet pour trouver quelques suggestions mais je suis assez confus au sujet de ce qui est et n'est pas possible et quelle est la manière la plus simple de le faire. Par exemple this question semble être presque ce que je veux, malheureusement je ne peux pas utiliser la solution car le CodeSnippetStatement ne semble pas être supporté par le moteur d'exécution que j'utilise (le moteur de règles WF).

Des suggestions qui pourraient m'aider/me diriger dans la bonne direction?

Répondre

2

Il n'existe aucune bibliothèque ou fonction permettant d'analyser le code C# dans les objets CodeDOM dans le cadre des bibliothèques .NET standard. Les bibliothèques CodeDOM ont certaines méthodes qui semblent être conçues pour cela, mais aucune d'elles n'est réellement implémentée. Pour autant que je sache, il existe une implémentation disponible dans Visual Studio (utilisée par les concepteurs, par exemple), mais uniquement interne.

CodeSnippetStatement est un nœud CodeDOM qui vous permet de placer n'importe quelle chaîne dans le code généré. Si vous voulez créer une arborescence CodeDOM juste pour générer du code source C#, cela est généralement correct (le générateur de code source imprime simplement la chaîne à la sortie). Si le moteur WF doit comprendre le code de votre chaîne (et pas seulement générer le code source et le compiler), CodeSnippetStatement ne fonctionnera pas. Cependant, il existe des outils tiers pouvant être utilisés pour analyser le code source C#. Dans un projet sur lequel j'ai travaillé, nous avons utilisé NRefactory library (qui est utilisé dans SharpDevelop) et cela a très bien fonctionné. Il vous donne un arbre (AST) représentant le code analysé et je crains que vous ayez besoin de le convertir vous-même dans l'arbre CodeDOM correspondant.

1

J'ai trouvé une implémentation de bibliothèque here qui semble couvrir à peu près tout ce dont j'ai besoin pour mes besoins. Je ne sais pas si c'est assez robuste pour être utilisé dans des scénarios d'affaires, mais pour mes tests unitaires c'est à peu près tout ce que je peux demander.