Компиляция кода 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 и любые дополнительные методы, которые вы им предоставляете.