11

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?

4

6 回答 6

9

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

由于您要使用静态分析信息,因此您需要Microsoft.CodeAnalysisNuGet 包(C# 所需的东西位于命名空间下),并在文档中的示例和演练Microsoft.CodeAnalysis.CSharp页面上花费一些时间。

于 2015-06-04T23:09:57.693 回答
6

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

于 2009-10-03T17:19:45.590 回答
2

在 C# 上尝试Linq。太棒了。

于 2009-10-03T16:17:47.103 回答
0

试试Mono.Cecil

于 2009-10-03T16:33:02.533 回答
0

如果您希望能够对 C# 源代码(或各种其他语言)进行解析和执行任意分析和转换,请查看我们的 DMS 软件再工程工具包

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

此外,DMS 提供源代码级别的模式匹配和转换(例如,您可以编写“x=x+1 ==> x++”,而不是编写所有的 walk-around-tree-to-verify,修改树以进行更改。 )请参阅有关程序转换的文章,以了解为什么这会少很多工作..

于 2009-10-03T17:21:35.187 回答
-2

CSharpCodeProvider可能是您正在寻找的。

于 2009-10-03T16:32:57.807 回答