Запуск скриптов внутри C # - PullRequest
       18

Запуск скриптов внутри C #

6 голосов
/ 23 сентября 2008

Я хочу запустить javascript / Python / Ruby внутри моего приложения.

У меня есть приложение, которое автоматически создает процесс на основе определения пользователя. Процесс генерируется в C #. Я хочу, чтобы опытные пользователи могли вводить скрипт в предопределенных местах. Эти сценарии должны запускаться из процесса C #. Например, созданный процесс будет иметь некоторые действия, и в середине сценарий должен быть запущен, а затем процесс продолжается как прежде. Есть ли механизм для запуска этих скриптов из C #?

Ответы [ 8 ]

5 голосов
/ 23 сентября 2008

По сути, у вас есть две проблемы: как определить точку внедрения в сгенерированном коде и как запустить оттуда скрипты python / ruby ​​/ whatev.

В зависимости от того, как вы генерируете процесс, одним из возможных решений будет добавление функции к каждой возможной точке ввода. Функция проверит, ассоциировал ли пользователь какие-либо сценарии с заданными точками, и если это так, запускает сценарий, вызывая IronPython / IronRuby (с необязательными заданными параметрами).

Недостатки: ограниченный доступ сценариев к создаваемому процессу (в основном, доступны только переменные, переданные в качестве параметров); а также пределы реализации (в текущей версии IronPython отсутствует несколько основных системных функций).

2 голосов
/ 23 сентября 2008

Посмотрите на IronPython и IronRuby - они позволят вам легко взаимодействовать с C #.

1 голос
/ 24 сентября 2008

.NET имеет язык сценариев, включая движок времени выполнения в PowerShell, который может быть встроен в любое приложение .NET.

1 голос
/ 23 сентября 2008

Отличный язык сценариев C # - Script.Net

1 голос
/ 23 сентября 2008

Вы можете скомпилировать код C # из приложения C #, используя класс CSharpCodeProvider .

Если компиляция прошла успешно, вы можете запустить получившуюся сборку, возвращенную через свойство CompiledAssembly класса CompilerResults .

0 голосов
/ 23 сентября 2008

Я сделал это совсем недавно - разрешил добавление сценариев C # во время выполнения.

Это совсем не сложно, и эта статья:

http://www.divil.co.uk/net/articles/plugins/scripting.asp

- очень полезная сводка деталей.

0 голосов
/ 23 сентября 2008

Задумывались ли вы о Visual Studio для приложений? Я не слышал об этом много с тех пор .NET 1.1, но это может стоить посмотреть.

http://msdn.microsoft.com/en-us/library/ms974548.aspx

0 голосов
/ 23 сентября 2008

Вы можете скомпилировать код C # «на лету» в сборку в памяти. Я думаю, что это возможно с IronPython и IronRuby. Посмотрите на метод CodeDomProvider.CreateProvider .

Если вам нужно много запускать сценарии или если ваш процесс выполняется в течение длительного времени, вы можете загрузить эти сборки в другой домен приложений. И выгрузите AppDomain после того, как закончите со скриптом. В противном случае вы не сможете удалить их из памяти. Это имеет некоторые последствия для других классов в вашем проекте, потому что вы должны маршалировать все вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...