如何将字符串解析为func以在运行时使用?

时间:2009-10-03 11:35:38

标签: c#

如何允许用户在winforms应用程序中输入字符串,然后使用反射来解析可以在运行时执行的字符串?

由于

4 个答案:

答案 0 :(得分:4)

我认为安全漏洞很多,除非你非常谨慎地做到这一点!但是,如果你真的想这样做,你会想要使用CodeDOM。由于C#不是({)} dynamic language,因此它没有eval功能,并且使用CodeDOM动态编译程序集是最接近的。

有关示例,请参阅我对this related question的回答,该回复使用CSharpCodeProvider和CodeDOM来实现目标。但是要注意,如果你想使你的应用程序更加安全,你需要使用自己的AppDomain运行代码,也可能运行自己的进程(使用某种形式的IPC)。

答案 1 :(得分:2)

您不能使用反射来解析字符串。

您可以使用CSharpCodeProvider类将字符串(假设它包含C#)编译到临时程序集中。从那里你可以创建对象,在它们上找到方法并执行它们。

答案 2 :(得分:0)

thread可能会给你一些提示。

答案 3 :(得分:0)

This可能会对您有所帮助。

从那里提取的TODO列表:

  
      
  1. 使用CodeDom使用适当的方法,类,命名空间等声明来转换和包装用户定义的方法/函数体(以便准备将源代码编译到内存或物理文件中)

    < / LI>   
  2. 将生成的Dom编译到程序集中(我将使用物理文件)

  3.   
  4. 创建一个单独的应用程序域并将已编译的程序集加载到其中。

  5.   
  6. 从加载的程序集中提取生成的方法,并针对执行上下文调用它(在这种情况下,它将是一个Window)

  7.   
  8. 免费资源,卸载第二个应用程序域并执行临时文件清理。

  9.   

P.S。 - 不要这样做!