Я написал пакет, SharpByte.Dynamic, чтобы упростить задачу o f компиляция и выполнение кода динамически. Код может быть вызван для любого объекта контекста с использованием методов расширения, как подробно описано ниже here.
Например,
someObject.Evaluate<int>("6/{{{0}}}", 3))
возвращает 3;
someObject.Evaluate("this.ToString()"))
возвращает представление строки контекстного объекта;
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
запускает эти заявления как сценарий и т.д.
Исполняемые может быть получен легко, используя фабричный метод, как показано в примере here --all вам нужно исходный код и список любых ожидаемых названные параметры (маркеры встроены с помощью тройного кронштейна обозначения, таких как {{{0}}}, чтобы избежать столкновений с string.Format(), а также Рулями-подобные синтаксисы):
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
каждого исполняемым объектом (сценарий или выражение) является потокобезопасным, может быть хранилище d и повторно используется, поддерживает ведение журнала из сценария, хранит информацию о времени и последнее исключение, если они встречаются, и т. д. Также существует метод Copy(), который позволяет создавать дешевые копии, т. е. использовать исполняемый объект, скомпилированный из сценария или выражения как шаблон для создания других.
Накладные расходы на выполнение уже скомпилированного скрипта или оператора относительно низки, в то время как под микросекундой на скромном оборудовании, а уже скомпилированные скрипты и выражения кэшируются для повторного использования.
C# call ironpython's eval. Я попробовал это в C# 4.0. нет опыта работы с C# 2.0 – 2011-05-15 03:00:56
@Peter Long, где можно найти документацию по eval IronPython? – smartcaveman 2011-06-16 16:09:41
Взгляните на [Mono CSharp interactive shell] (http://www.mono-project.com/CsharpRepl). Он имеет [eval-подобные функции] (http://www.go-mono.com/docs/index.aspx?link=N:Mono.CSharp). – 2011-02-27 20:28:24