How to programmatically parse and modify C# code

爱⌒轻易说出口 提交于 2019-11-29 14:01:41

问题


What I want to do is to read C# code, parse it, insert some method calls and compile it finally.

Is it possible to convert C# source code (a list of strings) to CodeDOM objects?


回答1:


It is not directly possible to do this with the core .NET Framework. You need to use third party or add-on tools, for example:

  • Open source C# Parser: http://www.codeplex.com/csparser
  • GPLEX paired with a C# grammar: http://plas.fit.qut.edu.au/gplex/



回答2:


This is a really old question, but is worth noting that the accepted answer no longer applies. Microsoft's recent Roslyn project is explicitly aimed at exposing all the knowledge the compiler gains about your codebase in the process of statically analyzing it, and exposing all this information through managed APIs for you to leverage. It is available for both VB and C#.

Since you want to consume static analysis information, you'll need the Microsoft.CodeAnalysis NuGet package (the stuff you need for C# is under the Microsoft.CodeAnalysis.CSharp namespace) and some time at the samples and walkthroughs page in the docs.




回答3:


Try Linq over C#. It's wonderful.




回答4:


Try Mono.Cecil




回答5:


If you want the ability to parse, and carry out arbitrary analyses and transformations on C# source code (or a variety of other languages), check out our The DMS Software Reengineering Toolkit.

DMS has a full C# front end, builds complete abstract syntax trees for parsed code (but not a CodeDom), provides a full procedural API for walking/checking/changing the ASTs. After revising the tree, DMS can regenerate source code corresponding to the modified tree, either in fidelity mode where it tries to preserve the original spacing, or prettyprint mode where it applies a prettyprint style that you can control completely. Comments are retained in the regenerated source properly.

In addition, DMS provides source-level pattern matching and transformation (e.g, you can write "x=x+1 ==> x++" instead of coding all the walk-around-tree-to-verify, hack the tree to change.) See writeup on program transformations to understand what why this is a lot less work..




回答6:


The CSharpCodeProvider might be what you're looking for.



来源:https://stackoverflow.com/questions/1514169/how-to-programmatically-parse-and-modify-c-sharp-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!