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

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

1 Ответ

4 голосов
/ 05 апреля 2011

Я думаю, вам лучше использовать динамический язык, совместимый с .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 и любые дополнительные методы, которые вы им предоставляете.

...