Компиляция кода C# из txt файла для взаимодействия с запущенным wpf-приложением

Я искал в Интернете удобный способ компилировать код во время выполнения и манипулировать объектами запущенного приложения (свойствами и т. Д.). Я сталкивался с Snippy, CodeDom и CSharpCodeProvider, но я не совсем понял, как я могу использовать эти решения в своем приложении, чтобы делать то, что я хочу. Суть в том, что я хочу иметь небольшую часть кода во внешнем файле, чтобы я мог поменять другой код во время выполнения (например, формулы для манипулирования данными и т. Д.). Может кто-нибудь объяснить мне, как именно я могу реализовать это в приложение WPF аккуратно? Мне просто нужно передать внешнему коду некоторые данные, и после выполнения он вернет мне некоторые данные, которыми я могу заполнить объект. PS: Я также думал о синтаксическом анализе математического выражения из String и манипулировании этими данными таким образом, но если я смогу внешне анализировать и выполнять код C# во время выполнения, это даст мне гораздо больше свободы и контроля над формулой и данными. Заранее спасибо.

1 ответ

Решение

Я думаю, вам лучше использовать динамический язык, совместимый с.NET, такой как IronPython или IronRuby. Они в значительной степени легко интегрируются с C#/.NET и на самом деле предназначены для обеспечения сценариев времени исполнения.

Тривиальный пример использования IronPython из C# Джона Скита в глубине:

// the python code
string python = @" 
text = 'hello' 
output = input + 1 
";

// setup the scripting engine
ScriptEngine engine = Python.CreateEngine(); 
ScriptScope scope = engine.CreateScope(); 
scope.SetVariable("input", 10); 
engine.Execute(python, scope); 

// the results
Console.WriteLine(scope.GetVariable("text")); 
Console.WriteLine(scope.GetVariable("input")); 
Console.WriteLine(scope.GetVariable("output"));

Само собой разумеется, что сценарии могут использовать.NET Base Class Library и любые дополнительные методы, которые вы им предоставляете.

Другие вопросы по тегам