Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 您能在.NET中执行代码间接寻址吗?_C#_.net_Vb.net_Intersystems Cache_Indirection - Fatal编程技术网

C# 您能在.NET中执行代码间接寻址吗?

C# 您能在.NET中执行代码间接寻址吗?,c#,.net,vb.net,intersystems-cache,indirection,C#,.net,Vb.net,Intersystems Cache,Indirection,我记得在系统间缓存代码中,您可以使用间接寻址获取字符串,并通过在字符串变量前面加“@”将其转换为真正的可执行代码。这可以在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

我记得在系统间缓存代码中,您可以使用间接寻址获取字符串,并通过在字符串变量前面加“@”将其转换为真正的可执行代码。这可以在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

我假设您希望在运行时编译。
System.CodeDom和System.CodeDom.Complier命名空间包含与运行时编译相关的接口。

对于您自己的语言,您需要从CodeDomProvider的派生类实现派生类。

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

编译字符串更像是系统间缓存的方式,但仍然需要更多的工作,因为您必须提供编译器需要的所有信息。如果你看一看,你会看到增加的复杂性。编译后的代码将在它自己的程序集中。程序集只有在自己的应用程序域中才能卸载,动态编译程序集非常困难,大多数人都不必担心是否可以避免它

提出了解决您的问题的各种方法


如果链接保持活动状态,可以找到您所描述的解决方案的一些源代码。

看看Roslyn,我喜欢您选择的晦涩难懂的Caché作为间接寻址的示例。你是不是碰巧在一家医疗保健公司工作?哈哈!是啊,我为Epic工作了5.5年。你也是?哎呀,一年半后我终于看到你的回复了。是的,我在那里工作了3.5年。很好。你现在做什么?我现在为一位Epic客户工作。现在是回报的时候了!好棒!这是否等同于从命令行调用csc*?或运行msbuild*.sln。。从.NET代码内部?这是脚本编写-因此这是在运行时编译。
csc意味着在编译时进行本机编译。对于使用此命名空间的一些著名示例,您是否推荐任何参考/链接?同时,我将对它进行研究。这在Java中可能吗?:-)