Есть ли способ, которым я могу анализировать / запускать C # в приложении, почти как скрипт? - PullRequest
3 голосов
/ 09 января 2012

В настоящее время я пишу некоторый код, и мне интересно, можно ли будет выполнить какой-нибудь код C # из моего приложения. Я дам вам идею, скажем, я хочу дать пользователю текстовое поле, чтобы он набрал какой-то код и нажал кнопку «Перейти», я хочу, чтобы он попросил список фруктов, а затем прошел каждый фрукт и вывел его… пример:

var fruitList = getFruit();
foreach(var fruit in fruitList)
{
   print(fruit.Name);
}

Я хотел бы иметь возможность пройти через это и назначить список объектов Fruit для fruitList, парсер должен иметь возможность связать getFruit () с методом, который я написал в коде c #. То же самое касается печати, она должна быть приравнена к написанной мной функции печати, которая выводит ее в текстовое поле.

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

Итак, мои коллеги-программисты, знаете ли вы что-нибудь, что может мне помочь?

Если нет, не проблема, я ценю все отзывы, будь то советы, рекомендации, ссылки на статьи, такие как http://blogs.msdn.com/b/ericwhite/archive/2010/06/29/writing-a-recursive-descent-parser-using-c-and-linq.aspx или решение.

С уважением,
Адам

РЕДАКТИРОВАТЬ: мне удалось получить рабочий пример. Обратите внимание, что этот код немного запутан, поскольку я вставил какой-то другой код в тестовое приложение, но он работает. По сути, я компилирую код в DLL, затем загружаю DLL, нахожу тип, нахожу метод и вызываю его. Это тоже чертовски быстро! Я не хочу спамить вас, поэтому полный код приведен ниже:

http://imdsm.blogspot.com/2012/01/compile-c-into-assembly-then-load-it.html

Спасибо всем, кто писал здесь. Вы только что спасли меня от путаницы!

Ответы [ 4 ]

3 голосов
/ 09 января 2012

Вы имеете в виду, как на этом скриншоте здесь ?

Мы используем это в нашем программном обеспечении, HeuristicLab , вы можете добавить ProgrammableOperator в граф оператора, который будет выполнять код, который вы ввели в том месте, где вы его ввели, с помощью пользовательского алгоритма.

В пространстве имен System.CodeDom у вас есть все необходимое для динамической компиляции кода. Вы можете создать сборку из компиляции, получить типы сборок и выполнить их код.

1 голос
/ 09 января 2012

Посмотрите, может ли Roslyn помочь, он все еще находится в статусе CTP.

1 голос
/ 09 января 2012

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

Проект "Рослин"

1 голос
/ 09 января 2012

Вы можете использовать CSharpCodeProvider

Или вы можете использовать язык сценариев и запустить интерпретатор в вашем приложении. Ex IronRuby

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