11
votes

Comment préalablement analyser et modifier le code C #

Ce que je veux faire, c'est lire le code C #, analyser, insérer des appels de méthode et le compiler enfin.

est-il possible de convertir le code source C # (liste des chaînes) vers des objets CODEDOM?


0 commentaires

6 Réponses :


2
votes

essayez Linq sur C # . C'est merveilleux.


0 commentaires

-2
votes

the CsharpCodeProvider pourrait être ce que vous " RE rechercher.


1 commentaires

NON. Je ne pense pas que CsharpcodeProvider puisse faire ce que j'ai décrit ci-dessus.



0
votes

essayez mono.cecil


1 commentaires

Correct, il traite uniquement d'IL. Vous pouvez utiliser NREFactory (qui est un analyseur pour C # et VB.NET, également du projet #Développé).



6
votes

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


2 commentaires

Mais pourquoi? Le compilateur C # n'utilise-t-il pas de code de code?


Non. CodeDom est pour les développeurs d'applications gérés; CSC.EXE est un code non géré qui n'a aucune dépendance .NET.



0
votes

Si vous souhaitez analyser et effectuer des analyses arbitraires et des transformations sur le code source C # (ou une variété d'autres langues), consultez notre Toolkit de réengagement logiciel DMS .

DMS a une extrémité frontale C # complète, construit des arbres de syntaxe abstraites complètes pour un code analysé (mais pas un code de code), fournit une API de procédure complète pour la marche / la vérification / la modification des asts. Après avoir révisé l'arborescence, DMS peut régénérer le code source correspondant à l'arborescence modifiée, soit en mode Fidelity où il essaie de préserver l'espacement d'origine, ou un mode prettyprint où il applique un style prettprint que vous pouvez contrôler complètement. Les commentaires sont conservés correctement dans la source régénérée.

De plus, DMS fournit une correspondance et une transformation de modèle de niveau source (par exemple, vous pouvez écrire "x = x + 1 ==> x ++" au lieu de coder tout le tour-arbre-à-vérifier, pirater l'arbre changer.) Voir Effacement sur les transformations du programme pour comprendre pourquoi c'est un beaucoup moins de travail ..


0 commentaires

9
votes

C'est une très vieille question, mais il convient de noter que la réponse acceptée ne s'applique plus. Le récent Le projet Roslyn est explicitement visé à exposer toutes les connaissances que les gains du compilateur sur votre code de code dans le processus de statistique de manière statique. l'analysant et exposer toutes ces informations via des API gérées pour vous de tirer parti. Il est disponible pour VB et C #.

Étant donné que vous souhaitez consommer des informations statiques d'analyse, vous aurez besoin du Microsoft.Codeanalyse Package Nuget (le contenu dont vous avez besoin pour C # est sous le Microsoft.codeanalysis.cshaarp Espace de noms) et un peu de temps au Échantillons et procédures de navigation page dans les docs.


0 commentaires