【问题标题】:Execute a user-provided string containing c# code [duplicate]执行包含 c# 代码的用户提供的字符串 [重复]
【发布时间】:2011-06-28 18:07:42
【问题描述】:

可能重复:
C# eval equivalent?

嗨 - 我想知道如何从我的应用程序中执行用户提供的包含 c# 代码的字符串。

例子:

string userProvidedString = "Console.Write("Hello World!")";

ExecuteCode(userProvidedString); // Should output Hello World!

【问题讨论】:

  • 我知道我需要在执行之前清理代码,而且代码实际上不会来自最终用户,而是来自我将完全控制的客户端应用程序。在这个问题中,我只是简化了问题。
  • 如果没有正确清理,执行任意用户提供的代码可能会非常危险。此外,作为一种编译语言,C# 并不是此类事情的最佳场所。如果您想要评估和执行一小部分代码,您通常可以编写自己的迷你解释器,它可以理解并完全满足您的需求。执行任意代码是另一回事 - 动态语言有 'eval()' 语句允许您执行此操作,但 C# 本身没有。
  • 在实践中我能想到的唯一原因是开发某种编程或调试工具。从这个意义上说,它并不比使用 Visual Studio 更危险。

标签: c#


【解决方案1】:
【解决方案2】:

Framework 中有一个CSharpCodeProvider 类可以使用。 它包含一个CompileAssemblyFromSource 方法,用于解析和编译字符串中的代码。

您可能还想查看 MSDN 上的这篇博文:http://blogs.msdn.com/b/dohollan/archive/2010/08/09/programmatically-invoke-the-c-compiler.aspx

注意:以上博文链接已失效,请改用此链接:https://docs.microsoft.com/en-us/archive/blogs/dohollan/programmatically-invoke-the-c-compiler

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2016-08-07
    • 2010-10-16
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多