0

我记得使用 InterSystems Cache 代码,您可以使用间接获取字符串并将其转换为真正的可执行代码,方法是在字符串变量前面加上“@”。这可以在 C#.NET 或 VB.NET 代码中完成吗?所以我想要一个方法,它可以接受一个字符串参数数组(带有一行或多行代码),并运行该代码,假设它当然不会引发异常。我要去哪里?我正在尝试在 .NET 代码中编写编译器。

SET x="set a=3" XECUTE x   ; sets the public variable a to 3

OR

SET x="tag1" d @x  ; do/call the public subroutine tag1

OR 

Set Y = "B",@Y = 6  ; sets public variable B = 6
4

2 回答 2

1

我假设您想在运行时进行编译。
System.CodeDom 和 System.CodeDom.Complier 命名空间包含与运行时编译相关的接口。
对于您自己的语言,您需要从 CodeDomProvider 的派生类实现派生类。

于 2012-04-04T05:52:35.977 回答
1

对于 .NET,您可以使用 System.CodeDom 以编程方式构建代码,它基本上是中间语言的包装器,或者您可以使用 System.CodeDom.Compiler 获取将字符串(或文件)编译为可执行文件或 DLL 的对象使用 C# 或 VB.NET 编译器。

编译字符串更像是 Intersystems Cache 的做法,但它仍然需要更多的工作,因为您必须提供编译器需要的所有信息。如果您查看CompilerParameters 类 ,您将看到增加的复杂性。编译后的代码将在它自己的程序集中。除非程序集位于其自己的应用程序域中,否则无法卸载程序集,并且在动态编译时,如果可以避免它,大多数人都不会费心。

在这个站点上提出了解决您的问题的各种方法。

如果链接仍然有效,可以在此处找到您所描述的一种解决方案的一些源代码。

于 2012-04-05T17:21:46.627 回答