DLR:将语句和声明对象放入 CodeCompileUnit 或类似 CodeCompileUnit 的对象

DLR: Put statement and declaration objects to CodeCompileUnit or CodeCompileUnit-like objects

IronRuby 和 IronPython 具有自定义内置、标准模块,您可以直接编写代码(直接在代码中使用语句和声明),而不是像 C# 和中那样使用名称空间和 类 VB.NET.

我正在尝试使用 CodeCompileUnit,但我只能找到 NamespacesAssemblyCustomAttributesStartDirectivesEndDirectivesReferencedAssemblies 属性。没有其他东西,甚至 类(你可以在 C# 和 VB.NET 中放置没有命名空间的 类)。

我正在尝试找到一种方法来向 CodeCompileUnit 添加诸如变量声明、方法和表达式之类的东西,而不仅仅是命名空间和指令。

我怎样才能做到这一点?

System.CodeDOM 是一个代码生成系统,旨在针对许多 .NET 语言(尤其是 C# 和 VB.NET 的通用语言功能而构建。它并未设计为支持任何 .NET 语言的特性。

即使您可以在 IronPython 或 IronRuby 中将语句作为 top-level 实体,但在 C# 或 VB.NET 中不允许您这样做,因此,这不受 System.CodeDOM.

请注意,System.CodeDOM 的开发在 .NET 2.0 之后基本上停止了。因此,此代码模型也不支持 C# 或 VB.NET 的更新语法功能,例如 expressions-syntax、lambda 表达式或 async/await。在我的印象中,System.CodeDOM 主要是为了让 WinForms 设计器之类的东西成为可能而发明的。在这样的应用程序中,覆盖所有语言的所有语言特性并不重要,重要的是覆盖共同点,以便您可以同时生成多种语言的相同代码。因为所有 .NET 语言都必须支持 CLI,所以共性还包括一些特定事件(例如 Java 不知道它们)。

编辑: 因此,不要期望 System.CodeDOM 涵盖所有语言的所有语言特性,期望它只支持 enough 所有语言为其生成代码。