Могу ли я выполнить один оператор C # в качестве сценария? - PullRequest
1 голос
/ 12 октября 2010

Я видел онлайн, как C # позволяет вам компилировать код на лету, и я думаю, что это действительно потрясающая вещь. Мне нужно использовать эту функциональность для моего проекта. Но здесь есть проблема. Я не пытаюсь скомпилировать целую функцию или новую программу динамически. Мне просто нужно вызвать одно заявление, чтобы создать или удалить материал на лету.

Есть ли способ, которым C # может скомпилировать и / или запустить один оператор кода и позволить этому оператору воздействовать на переменные и объекты в области действия текущей программы?

Спасибо

Ответы [ 6 ]

2 голосов
/ 12 октября 2010

Вы можете скомпилировать C #, используя Microsoft.CSharp.CSharpCodeProvider , но это очень сложно, если вы хотите сделать это правильно, поскольку вам нужно загрузить свой код в отдельный домен приложения, чтобы предотвратить утечки памяти.

Я бы предложил использовать IronPython или другой язык DLR: http://www.codeplex.com/wikipage?ProjectName=IronPython

Некоторые примеры здесь, не уверен, насколько они актуальны, но идея почти такая же: http://www.voidspace.org.uk/ironpython/dlr_hosting.shtml

0 голосов
/ 12 октября 2010

Чтобы дать вам альтернативу вместо использования C # в качестве языка сценариев, взгляните на Conscript [1].
Conscript - это скомпилированный язык сценариев для .NET.

[1]: http://www.codeproject.com/KB/cs/Conscript.aspx

0 голосов
/ 12 октября 2010

Это зависит от того, что вы пытаетесь сделать ... если вы хотите использовать его в качестве встроенного языка сценариев в другом приложении, тогда мой ответ не применим, но если вы просто хотите выполнить случайные операторы C # ( или программы, если хотите) и сохраните их в виде сценариев, LinqPad отлично подходит для этого.

0 голосов
/ 12 октября 2010

Сценарии статических языков - это компромисс. Существуют проблемы, связанные с областью применения и безопасностью, но ими можно управлять.

Если вы хотите выполнить статический код (например, C #) из управляемого времени выполнения, я бы рекомендовал начать с Mono. Команда Mono сделала шаги для создания безопасной среды для компиляции JIT-кода в нативный код во время выполнения.

Начните с их официального поста по теме.

0 голосов
/ 12 октября 2010

Вы можете при использовании отладчика.В точке останова, просто введите некоторый код в Immediate Window в VS и Viola.

Одна из лучших функций отладки из всех!

0 голосов
/ 12 октября 2010

«Мне просто нужно вызвать одно заявление, чтобы создать или удалить материал на лету».Подобные высказывания заставляют меня содрогаться до костей.Что вы пытаетесь достичь здесь, на самом деле?Вы хотите, чтобы ваш пользователь писал операторы C # и ваша программа выполняла их в своем домене приложений?Это не только огромный риск для безопасности, но и ужасный пользовательский опыт.

Кроме того, C # не является языком сценариев.Если вы попытаетесь использовать его как единое целое, у вас будет плохое время (TM).

...