你能在.NET中执行代码间接吗?

时间:2012-04-04 05:35:48

标签: c# .net vb.net intersystems-cache indirection

我记得使用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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

编译字符串更像是Intersystems Cache的做法,但它仍然更有效,因为您必须提供编译器所需的所有信息。如果你看the CompilerParameters class ,你会看到增加的复杂性。编译后的代码将在它自己的程序集中。程序集不能被卸载,除非它在自己的App域中,并且在动态编译它时很难让大多数人在他们可以避免的情况下不费心。

提出了解决问题的各种方法on this very site

如果链接保持活跃状态​​,可以找到一个针对您所描述内容的解决方案的源代码here