【问题标题】:How to programmatically parse and modify C# code如何以编程方式解析和修改 C# 代码
【发布时间】:2009-10-03 16:15:55
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net codedom


    【解决方案1】:

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

    由于您想要使用静态分析信息,因此您需要 Microsoft.CodeAnalysis NuGet 包(C# 所需的东西位于 Microsoft.CodeAnalysis.CSharp 命名空间下),并在某些时候位于文档中的 samples and walkthroughs 页面。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 但是为什么呢? C# 编译器不使用 CodeDOM 吗?
      • 不,它没有。 CodeDom 适用于托管应用程序开发人员; csc.exe 是非托管代码,没有 .NET 依赖项。
      【解决方案3】:

      试试Linq over C#。太棒了。

      【讨论】:

        【解决方案4】:

        试试Mono.Cecil

        【讨论】:

        • 正确,它只处理 IL。您可以使用 NRefactory(它是 C# 和 VB.NET 的解析器,也来自 #Develop 项目)。
        【解决方案5】:

        如果您希望能够对 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 以了解为什么这会少很多工作..

        【讨论】:

          【解决方案6】:

          CSharpCodeProvider 可能就是您要找的。​​p>

          【讨论】:

          • 没有。我不认为 CSharpCodeProvider 可以做我上面描述的事情。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多