【发布时间】:2009-10-03 16:15:55
【问题描述】:
我要做的是阅读C#代码,解析它,插入一些方法调用并最终编译它。
是否可以将 C# 源代码(字符串列表)转换为 CodeDOM 对象?
【问题讨论】:
我要做的是阅读C#代码,解析它,插入一些方法调用并最终编译它。
是否可以将 C# 源代码(字符串列表)转换为 CodeDOM 对象?
【问题讨论】:
这是一个非常古老的问题,但值得注意的是,已接受的答案不再适用。 Microsoft 最近的Roslyn 项目明确旨在公开编译器在静态分析代码库的过程中获得的有关代码库的所有知识,并通过托管 API 公开所有这些信息以供您利用。它适用于 VB 和 C#。
由于您想要使用静态分析信息,因此您需要 Microsoft.CodeAnalysis NuGet 包(C# 所需的东西位于 Microsoft.CodeAnalysis.CSharp 命名空间下),并在某些时候位于文档中的 samples and walkthroughs 页面。
【讨论】:
使用核心 .NET Framework 无法直接执行此操作。您需要使用第三方或附加工具,例如:
【讨论】:
试试Linq over C#。太棒了。
【讨论】:
【讨论】:
如果您希望能够对 C# 源代码(或各种其他语言)进行解析、任意分析和转换,请查看我们的 The DMS Software Reengineering Toolkit。
DMS 有一个完整的 C# 前端,为已解析的代码(但不是 CodeDom)构建完整的抽象语法树,为遍历/检查/更改 AST 提供完整的过程 API。修改树后,DMS 可以重新生成与修改后的树对应的源代码,无论是在保真模式下尝试保留原始间距,还是在漂亮打印模式下应用您可以完全控制的漂亮打印样式。评论正确地保留在重新生成的源中。
此外,DMS 提供源代码级别的模式匹配和转换(例如,您可以编写“x=x+1 ==> x++”而不是编写所有的 walk-around-tree-to-verify、hack the tree更改。)请参阅writeup on program transformations 以了解为什么这会少很多工作..
【讨论】:
CSharpCodeProvider 可能就是您要找的。p>
【讨论】: