你能在.NET中执行代码间接寻址吗
本文关键字:代码 间接寻址 执行 NET | 更新日期: 2023-09-27 18:30:00
我记得使用InterSystems Cache代码时,可以使用间接寻址来获取字符串,并通过在字符串变量前面加上"@"将其转换为真正的可执行代码。这可以在C#或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
我假设您希望在运行时进行编译
System.CodeDom和System.CodeDom.Completer命名空间包含与运行时编译相关的接口
对于您自己的语言,您需要从CodeDomProvider的派生类实现派生类。
对于.NET,您可以使用System.CodeDom(基本上是中间语言的包装器)以编程方式构建代码,也可以使用System.code Dom.Compiler获取一个对象,该对象使用C#或VB.NET编译器将字符串(或文件)编译为可执行文件或DLL。
编译字符串更像是系统间缓存的方式,但它仍然需要更多的工作,因为你必须提供编译器需要的所有信息。如果您查看CompilerParameters类,您将看到增加的复杂性。编译后的代码将在它自己的程序集中。程序集除非在自己的应用程序域中,否则无法卸载,并且在动态编译时,这已经足够困难了,如果可以避免的话,大多数人都不会在意。
在这个网站上提出了解决你问题的各种方法。
如果链接仍然有效,则可以在此处找到您所描述的一个解决方案的一些源代码。