Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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#语句作为脚本执行吗?_C#_Scripting_Dynamic - Fatal编程技术网

我可以将一个C#语句作为脚本执行吗?

我可以将一个C#语句作为脚本执行吗?,c#,scripting,dynamic,C#,Scripting,Dynamic,我在网上看到了C#如何允许您动态编译代码,我认为这是一件非常棒的事情。我需要在我的项目中使用此功能。但问题是。我不想动态编译一个完整的函数或新程序。我只需要调用一个语句来动态创建或删除内容 C#是否有办法编译和/或运行单个代码语句,并允许该语句作用于当前程序范围内的变量和对象 谢谢您可以使用编译C#,但是如果您想正确地编译,这会变得非常复杂,因为您需要在单独的应用程序域中加载代码以防止内存泄漏 我建议使用IronPython或其他DLR语言: 这里有一些示例,不确定它是否最新,但想法基本相同:“

我在网上看到了C#如何允许您动态编译代码,我认为这是一件非常棒的事情。我需要在我的项目中使用此功能。但问题是。我不想动态编译一个完整的函数或新程序。我只需要调用一个语句来动态创建或删除内容

C#是否有办法编译和/或运行单个代码语句,并允许该语句作用于当前程序范围内的变量和对象

谢谢

您可以使用编译C#,但是如果您想正确地编译,这会变得非常复杂,因为您需要在单独的应用程序域中加载代码以防止内存泄漏

我建议使用IronPython或其他DLR语言:

这里有一些示例,不确定它是否最新,但想法基本相同:

“我只需要调用一个语句来动态创建或删除内容。”这样的语句让我不寒而栗。你想在这里完成什么,真的?您想让用户编写C#语句,并让程序在其AppDomain中执行它们吗?这不仅是一个巨大的安全风险,也是一个可怕的用户体验


此外,C#不是一种脚本语言。如果你试图把它变成一个,你会有一个糟糕的时间(TM)。

你可以,同时使用调试器。在断点处,只需在VS和viola的即时窗口中键入一些代码


其中最好的调试功能有

编写静态语言脚本需要权衡。需要考虑的范围和安全性问题,但它们可以被控制。< /P> 如果您希望在托管运行时内执行静态代码(即C#),我建议从Mono开始。Mono团队在创建安全环境以在运行时将JIT代码编译成本机代码方面取得了长足的进步


这取决于你想做什么。。。如果您希望在另一个应用程序中使用它作为嵌入式脚本语言,那么我的答案不适用,但是如果您只想执行随机的C#语句(或程序,如果您愿意)并将其保存为脚本,这是非常棒的。

给您一个替代方案,而不是使用C#作为脚本语言,看一看新兵[1]。
Conscript是一种用于.NET的编译脚本语言。


[1] :

听起来你想要的是即时窗口:但是,我从来没有在程序运行时将其用于新功能。这可能很有用:詹姆斯:这取决于用户是谁。VS在调试监视窗口或即时窗口中运行用户编写的C#代码没有问题。据推测,OP正在编写一个应用程序,其中代码由用户输入,而不是从互联网上下载。我认为即使是这样,它仍然有非常合法的用途,而C#with CAS与浏览器中运行的JavaScript一样安全。尽管如此,是的,除非他真的想要C#,否则我会使用DLR语言@丽:很好。我同意,应该使用DLR解决方案或其他为可编写脚本而构建的语言。