我在网上看到C#如何允许你动态编译代码,我觉得这真是太棒了。我需要在项目中使用此功能。但这是问题所在。我不是想动态编译整个函数或新程序。我只需要调用一个语句来动态创建或删除东西。
C#是否可以编译和/或运行单个代码语句并允许该语句作用于当前程序范围内的变量和对象?
由于
答案 0 :(得分:2)
您可以使用Microsoft.CSharp.CSharpCodeProvider编译C#,但是如果您想要正确执行它会变得非常复杂,因为您需要在单独的App Domain中加载代码以防止内存泄漏。
我建议使用IronPython或其他一些DLR语言:http://www.codeplex.com/wikipage?ProjectName=IronPython
这里有一些示例,不知道它是最新的,但这个想法几乎相同:http://www.voidspace.org.uk/ironpython/dlr_hosting.shtml
答案 1 :(得分:0)
“我只需要调用一个语句来动态创建或删除内容。”像这样的陈述让我对我的骨头不寒而栗。你想在这里完成什么,真的吗?您希望让您的用户编写C#语句并让您的程序在其AppDomain中执行它们吗?这不仅是一个巨大的安全风险,也是一种糟糕的用户体验。
此外,C#不是脚本语言。如果你试图把它变成一个,你就会有一个糟糕的时间(TM)。
答案 2 :(得分:0)
您可以在使用调试器时使用。在断点处,只需在VS中的立即窗口和中提琴中键入一些代码。
有一个最好的调试功能!
答案 3 :(得分:0)
脚本化静态语言需要权衡利弊。需要考虑范围和安全问题,但可以控制它们。
如果您想在托管运行时间内执行静态代码(即C#),我建议您从Mono开始。 Mono团队已经大踏步地创建了一个安全的环境,可以在运行时将JIT代码编译为本机代码。
答案 4 :(得分:0)
这取决于你要做什么...如果你想在另一个应用程序中使用它作为嵌入式脚本语言,那么我的答案不适用,但如果你只是想执行随机C#语句(或者你喜欢的程序)并将它们保存为脚本,LinqPad非常棒。
答案 5 :(得分:0)
为了给你一个替代方案,而不是使用C#作为脚本语言,请看一下Conscript [1]。
Conscript是.NET的编译脚本语言。