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?
这是一个非常古老的问题,但值得注意的是,已接受的答案不再适用。Microsoft 最近的Roslyn项目明确旨在公开编译器在静态分析代码库的过程中获得的有关代码库的所有知识,并通过托管 API 公开所有这些信息以供您利用。它适用于 VB 和 C#。
由于您要使用静态分析信息,因此您需要Microsoft.CodeAnalysis
NuGet 包(C# 所需的东西位于命名空间下),并在文档中的示例和演练Microsoft.CodeAnalysis.CSharp
页面上花费一些时间。
使用核心 .NET Framework 无法直接执行此操作。您需要使用第三方或附加工具,例如:
在 C# 上尝试Linq。太棒了。
如果您希望能够对 C# 源代码(或各种其他语言)进行解析和执行任意分析和转换,请查看我们的 DMS 软件再工程工具包。
DMS 具有完整的 C# 前端,为已解析的代码(但不是 CodeDom)构建完整的抽象语法树,为遍历/检查/更改 AST 提供完整的过程 API。修改树后,DMS 可以重新生成与修改后的树相对应的源代码,无论是在保真模式下尝试保留原始间距,还是在漂亮打印模式下应用您可以完全控制的漂亮打印样式。注释正确地保留在重新生成的源中。
此外,DMS 提供源代码级别的模式匹配和转换(例如,您可以编写“x=x+1 ==> x++”,而不是编写所有的 walk-around-tree-to-verify,修改树以进行更改。 )请参阅有关程序转换的文章,以了解为什么这会少很多工作..
CSharpCodeProvider可能是您正在寻找的。