0

有谁知道是否有办法在运行时评估 c# 代码。例如。我想允许用户输入 DateTime.Now.AddDays(1) 或类似的东西作为字符串,然后评估字符串以获得结果。

我想知道是否可以访问 emmediate windows 功能,因为它似乎会评估动态输入的每一行。

我发现 VB 有一个来自 VBA*.dll 的未记录的 EbExecuteLine() API 函数,并且想知道是否有与 c# 等效的东西。

我还找到了一个自定义工具https://github.com/DavidWynne/CSharpEval(它曾经在 kamimucode.com 但作者已将其移至 GitHub)似乎可以做到这一点,但我更喜欢这样的东西.NET 的一部分

谢谢

4

5 回答 5

1

Mono 具有交互式命令行 (csharp.exe)

你可以看看它的源代码,看看它到底是如何做到的:

https://github.com/mono/mono/raw/master/mcs/tools/csharp/repl.cs

于 2011-04-05T08:35:45.953 回答
1

您可能已经看到,没有用于在运行时评估 C# 代码的内置方法。这是您提到的自定义工具存在的主要原因。

我还有一个允许评估 C# 代码的 C# eval 程序。它提供了在运行时评估 C# 代码并支持许多 C# 语句。事实上,此代码可用于任何 .NET 项目,但仅限于使用 C# 语法。查看我的网站http://csharp-eval.com了解更多详细信息。

于 2011-06-10T02:55:39.397 回答
0

Microsoft 的 C# 编译器还没有 Compiler-as-a-Service(应该与 C# 5.0 一起提供)。

您可以使用Mono 的 REPL ,也可以使用CodeDOM编写自己的服务

于 2011-04-05T08:38:20.613 回答
0

它并不快,但您可以即时编译代码,请参阅我之前的问题

获得程序集并且知道类型名称后,您可以使用反射构造已编译类的实例并执行您的方法..

于 2011-04-05T08:38:54.327 回答
0

O2 平台的C# REPL 脚本环境使用Fluent# API,它具有真正强大的反射 API,允许您执行代码片段。

例如:

"return DateTime.Now.ToLongTimeString();".executeCodeSnippet(); 

将返回

5:01:22 AM

注意 "...".executeCodeSnippet(); 实际上可以执行任何有效的 C# 代码片段(因此它非常强大)。

如果您想控制您的用户可以执行什么,我可以使用 AST 树来限制他们可以访问的 C# 功能。

还可以看看 Microsoft 的Roslyn,它非常强大,正如您在多个基于 Roslyn 的工具上看到的那样(所有在 VisualStudio 之外独立运行)

于 2012-08-03T04:08:24.853 回答