Попытка запустить скрипт (используя Roslyn Scripting API ):
var source = "while(true) { }";
return CSharpScript.EvaluateAsync(source).Result;
Он будет работать вечно.Как это прервать?
Я не возражаю против использования другого скриптового движка, хотя запрашивать его не по теме.Я нашел похожие вопросы ( пример ), но они бесполезны.
Справочная информация: Я хочу добавить поддержку пользовательских сценариев C # в свое программное обеспечение.Я хочу запускать сценарии в песочнице, поэтому возможность прерывать сценарии жизненно необходима.В прошлом у меня был некоторый опыт работы с CodeDOM , но я также не смог найти способ прервать там сценарии.
Мысли:
- Я мог бы предварительно обработатьПользовательский текст и вставьте мой код (проверяет
CancellationToken
и return/throw
) после каждой строки.Но приведенный выше пример невосприимчив к такой технике, и я должен был бы пройти сложный путь синтаксического анализатора (не имею опыта, мысли?). - Я мог бы предоставить метод, который пользователь должен явновызывать в своем скрипте проблемные места (например, внутри циклов), но пользователь может просто решить игнорировать это.
- Есть ли способ запустить скрипт пошагово?Режим песочницы-отладчика?Тогда я смогу проверить внешний запрос на завершение сценария и остановку отладки.
Каковы другие возможности?Кто-нибудь уже реализовал безопасный пользовательский сценарий?