如何允许用户在winforms应用程序中输入字符串,然后使用反射来解析可以在运行时执行的字符串?
由于
答案 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列表:
使用CodeDom使用适当的方法,类,命名空间等声明来转换和包装用户定义的方法/函数体(以便准备将源代码编译到内存或物理文件中)
< / LI>将生成的Dom编译到程序集中(我将使用物理文件)
创建一个单独的应用程序域并将已编译的程序集加载到其中。
从加载的程序集中提取生成的方法,并针对执行上下文调用它(在这种情况下,它将是一个Window)
- 醇>
免费资源,卸载第二个应用程序域并执行临时文件清理。
P.S。 - 不要这样做!