是否可以使用 C# 作为 DSL其中 C# 源代码由最终用户在 TextBox 中编辑,在应用程序运行时编译,然后由已运行的应用程序调用?
我问这个问题是因为在接下来的几个月里,我将需要实现一个简单的数学运算 DSL(类似于 Rachel Lim 在博客中提到的内容)http://rachel53461.wordpress.com/2011/08/20/the-math-converter/ http://rachel53461.wordpress.com/2011/08/20/the-math-converter/我专注于她的代码的数学处理方面,而不是 XAML/转换器方面)。我不会仅仅重用她的代码,因为我想添加 if 语句和可能的其他功能。如果我可以使用 C# 本身,那么我就可以获得所有功能,而无需重新实现它们。
如果可以的话,我想使用什么框架、命名空间或类来完成这样的任务?
请注意,我对 C# 派生的 DSL 要做的一件事是对所有必需的 using 标头语句进行硬编码,然后删除由精明的用户输入的所有 using 语句。这样做的目的是减少最终用户违背其企业政策的意愿或在站点管理员不知情的情况下尝试将我的类似 C# 的 DSL 转化为成熟的编译器的可能性。我提议的使用语句管理是否足以防止用户恶作剧?
最后,如果到目前为止所有的答案都是“是”,那么这种方法有哪些缺点,特别是引入安全漏洞的缺点?
Paul
我提议的使用语句管理是否足以防止用户恶作剧?
不可以。您还必须删除对完全限定类的引用。然后,用户仍然可以使用反射来访问他们没有以任何一种方式引用的类。
您需要创建一个单独的应用程序域来包含用户的代码,然后您可以对其进行适当的沙箱处理。这是MSDN上的相关文章 http://msdn.microsoft.com/en-us/library/bb763046.aspx,它深入解释了这个过程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)