2009-10-03 8 views

Répondre

6

Il est pas directement possible de le faire avec le .NET Framework de base. Vous devez utiliser un tiers ou outils complémentaires, par exemple:

+0

Mais pourquoi? Est-ce que le compilateur C# n'utilise pas CodeDOM? – ulrichb

+4

Non, ce n'est pas le cas. CodeDom est pour les développeurs d'applications gérées; csc.exe est un code non géré qui n'a pas de dépendances .NET. – bobbymcr

-2

Le CSharpCodeProvider pourrait être ce que vous cherchez.

+2

NO. Je ne pense pas que CSharpCodeProvider puisse faire ce que j'ai décrit ci-dessus. – ulrichb

0

Essayez Mono.Cecil

+1

Mais il ne traite pas du code source. Ou est-ce? –

+0

Correct, il traite uniquement de l'IL. Vous pouvez utiliser NRefactory (qui est un analyseur pour C# et VB.NET, également à partir du projet #Develop). –

0

Si vous voulez avoir la possibilité d'analyser , et effectuer des analyses arbitraires et des transformations sur le code source C# (ou une variété d'autres langues), consultez notre The DMS Software Reengineering Toolkit. DMS a un frontal C# complet, construit des arborescences syntaxiques abstraites complètes pour le code analysé (mais pas un CodeDom), fournit une API procédurale complète pour marcher/vérifier/changer les AST. Après avoir révisé l'arbre, DMS peut régénérer le code source correspondant à l'arbre modifié, soit en mode fidélité où il essaye de conserver l'espacement d'origine, soit en mode prettyprint où il applique un style prettyprint que vous pouvez contrôler complètement. Les commentaires sont conservés dans la source régénérée correctement. En outre, DMS fournit une correspondance et une transformation de modèle au niveau de la source (par exemple, vous pouvez écrire "x = x + 1 ==> x ++" au lieu de coder tout le walk-around-tree-to-verify, hack le arbre à changer.) Voir writeup on program transformations pour comprendre pourquoi c'est beaucoup moins de travail ..

5

Ceci est une question vraiment ancienne, mais il est à noter que la réponse acceptée ne s'applique plus. Le récent projet Roslyn de Microsoft vise explicitement à exposer toutes les connaissances acquises par le compilateur au sujet de votre base de code dans le processus d'analyse statique, et à exposer toutes ces informations via des API managées que vous pouvez exploiter. Il est disponible pour VB et C#.

Puisque vous voulez consommer de l'information d'analyse statique, vous aurez besoin du package Microsoft.CodeAnalysis NuGet (les choses dont vous avez besoin pour C# est sous l'espace de noms Microsoft.CodeAnalysis.CSharp) et un peu de temps à la page samples and walkthroughs dans la documentation.

Questions connexes