1

我需要将表示为字符串变量的简单语句(本质上是对某个对象的函数调用链)解析为 CodeDom 对象(可能是 的子类CodeStatement)。我还想提供一些默认的命名空间导入,以便能够使用不太冗长的语句。

我环顾了 SO 和 Internet 以找到一些建议,但我很困惑什么是可能的,什么是不可能的,什么是最简单的方法。例如,这个问题似乎几乎是我想要的,不幸的是我无法使用该解决方案,CodeSnippetStatement因为我使用的执行引擎(WF 规则引擎)似乎不支持该解决方案。

有什么建议可以帮助我/指向正确的方向吗?

4

2 回答 2

2

作为标准 .NET 库的一部分,没有库或函数可以将 C# 代码解析为 CodeDOM 对象。CodeDOM 库有一些似乎是为此而设计的方法,但实际上它们都没有实现。据我所知,Visual Studio 中有一些可用的实现(例如由设计师使用),但这只是内部的。

CodeSnippetStatement是一个 CodeDOM 节点,允许您将任何字符串放入生成的代码中。如果你想创建 CodeDOM 树只是为了生成 C# 源代码,这通常很好(源代码生成器只是将字符串打印到输出)。如果 WF 引擎需要理解您的字符串中的代码(而不仅仅是生成源代码并编译它),那么CodeSnippetStatement它将无法正常工作。

但是,有 3rd 方工具可用于解析 C# 源代码。在我参与的一个项目中,我们使用了 NRefactory 库(在 SharpDevelop 中使用)并且效果很好。它为您提供了一些表示已解析代码的树(AST),恐怕您需要自己将其转换为相应的 CodeDOM 树。

于 2010-03-16T22:43:37.547 回答
1

我在这里找到了一个库实现,它似乎涵盖了我所需要的几乎所有东西。我不知道它是否足够强大以用于业务场景,但对于我的单元测试来说,这几乎是我所能要求的。

于 2010-03-17T15:45:33.437 回答