如何以编程方式解析和修改C#代码

时间:2009-10-03 16:15:56

标签: c# .net codedom

我想要做的是阅读C#代码,解析它,插入一些方法调用并最终编译它。

是否可以将C#源代码(字符串列表)转换为CodeDOM对象?

6 个答案:

答案 0 :(得分:6)

使用核心.NET Framework无法直接执行此操作。您需要使用第三方或附加工具,例如:

答案 1 :(得分:6)

这是一个非常古老的问题,但值得注意的是,已接受的答案不再适用。微软最近的Roslyn项目明确旨在揭示编译器在静态分析代码库过程中获得的所有知识,并通过托管API公开所有这些信息,以便您利用。它适用于VB和C#。

由于您希望使用静态分析信息,因此您需要Microsoft.CodeAnalysis NuGet包(C#所需的内容位于Microsoft.CodeAnalysis.CSharp命名空间下),有时需要{{3}文档中的页面。

答案 2 :(得分:2)

试试Linq over C#。太棒了。

答案 3 :(得分:0)

尝试Mono.Cecil

答案 4 :(得分:0)

如果您希望能够解析C#源代码(或其他各种语言)的任意分析和转换,请查看我们的The DMS Software Reengineering Toolkit

DMS具有完整的C#前端,为解析的代码(但不是CodeDom)构建完整的抽象语法树,为步行/检查/更改AST提供完整的过程API。在修改树之后,DMS可以重新生成与修改后的树相对应的源代码,可以是保真模式,它可以保留原始间距,也可以是漂亮印刷模式,它可以应用可以完全控制的漂亮印刷样式。注释将在正确的重新生成的源中保留。

此外,DMS提供源级模式匹配和转换(例如,您可以编写“x = x + 1 ==> x ++”而不是编码所有的walk-around-tree-to-verify,hack the要改变的树。)请参阅writeup on program transformations以了解为什么这项工作要少得多......

答案 5 :(得分:-2)

CSharpCodeProvider可能就是你要找的东西。