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

时间:2019-05-05 17:56:59

标签: .net .net-core scripting-language dynamic-language-runtime

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

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

我正在尝试找到一种方法,能够将诸如变量声明,方法和表达式之类的内容添加到CodeCompileUnit中,而不是仅添加名称空间和指令。

我该如何实现?

1 个答案:

答案 0 :(得分:1)

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

即使在IronPython或IronRuby中允许您将语句作为顶级实体放置,在C#或VB.NET中也不允许这样做,因此,System.CodeDOM不支持。

请注意,在{.NET 2.0之后,System.CodeDOM的开发也基本上停止了。因此,此代码模型也不支持C#或VB.NET的最新语法功能,例如表达式语法,lambda表达式或异步/等待。根据我的印象,System.CodeDOM的主要发明是为了使WinForms设计器之类的事情成为可能。在这样的应用程序中,覆盖所有语言的所有语言功能并不是真正重要的,而仅覆盖公共性以使您可以同时以多种语言生成相同的代码并不是很重要。因为所有.NET语言都必须支持CLI,所以通用性还包括诸如特定事件之类的事件(例如Java不知道它们)。

编辑:因此,不要指望System.CodeDOM涵盖所有语言的所有语言功能,期望它仅支持所有语言的足够生成代码。