gpt4 book ai didi

c# - 使用 C# 作为我的 DSL——这可能吗?如果可以,如何实现?

转载 作者:行者123 更新时间:2023-12-02 15:24:13 25 4
gpt4 key购买 nike

是否可以将 C# 用作 DSL,其中 C# 源代码由最终用户在 TextBox 中编辑,在应用程序运行时进行编译,然后由已运行的应用程序调用?

我问这个问题是因为在接下来的几个月里我将需要实现一个简单的数学运算 DSL(类似于 Rachel Lim 在 http://rachel53461.wordpress.com/2011/08/20/the-math-converter/ 博客中提到的东西)我专注于她的代码的数学处理方面,而不是 XAML/转换器方面)。我不会仅仅重用她的代码,因为我想添加 if 语句和可能的其他功能。如果我可以使用 C# 本身,那么我就可以获得所有功能,而无需重新实现它们。

如果可以做到这一点,我想使用什么框架或命名空间或类来完成此任务?

请注意,我对 C# 派生的 DSL 要做的一件事是对所有必需的 using header 语句进行硬编码,然后删除由精明的用户输入的所有 using 语句。这样做的目的是减少最终用户违背其企业政策的意愿或在站点管理员不知情的情况下尝试将我的类似 C# 的 DSL 转化为成熟的编译器的可能性。 我提议的使用语句管理是否足以防止用户恶作剧?

最后,如果到目前为止所有答案都是"is",那么这种方法的缺点是什么,特别是引入安全漏洞的缺点是什么?

保罗

最佳答案

Is my proposed managing of using statements an adequate defense against user mischief?

没有。您还必须删除对完全限定类的引用。然后,用户仍然可以使用反射来访问他们没有以任何一种方式引用的类。

您需要创建一个单独的应用程序域来包含用户的代码,然后您可以对其进行适当的沙箱处理。 Here is a relevant article on MSDN ,它深入解释了这个过程。

关于c# - 使用 C# 作为我的 DSL——这可能吗?如果可以,如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12964790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com