Интерпретатор C# (без компиляции) [закрытый]

Соглашения, что Вы используете для Вас приложение, зависели бы от телефона

1), Какое приложение это.
2), Какую операционную систему Вы используете. Linux? Windows? У них обоих есть различные соглашения.

то, Что я предложил бы, является взглядом на другие интерфейсы командной строки для других команд в Вашей системе, обращение особого внимания на параметры передало. Наличие неправильных параметров должно дать направленное сообщение об ошибке решения пользователя. Легкое для нахождения экрана справки может помочь в удобстве использования также.

Без знают то, что точно сделает Ваше приложение, трудно дать определенные примеры.

37
задан 4 revs, 3 users 74% 7 November 2009 в 16:03
поделиться

9 ответов

Вы смотрели paxScript.NET ?

18
ответ дан 27 November 2019 в 04:56
поделиться

или http://www.csscript.net/ Олег писал хорошее вступление в проект кода

3
ответ дан 27 November 2019 в 04:56
поделиться

Проверьте Mono проект. Недавно они продемонстрировали CsharpRepl , что похоже на то, что вам нужно. Видео PDC 2008 здесь .


Обновление:
При ближайшем рассмотрении кажется, что использование службы Mono.CSharp для оценки скриптов невозможно. В настоящее время он связан со средой выполнения Mono, и они не ожидают, что она будет работать в среде со средним уровнем доверия. См. это обсуждение для получения дополнительной информации.

В качестве альтернативы можно включить компилятор Mono C # (исходники здесь ) в ваш проект и использовать его для создания сборок, загружаемых из файловой системы. Если вас беспокоят ресурсы, необходимые для загрузки всех этих сборок, вам, возможно, придется загрузить их в отдельный домен приложений.

12
ответ дан 27 November 2019 в 04:56
поделиться

Он не обрабатывает точный синтаксис C #, но PowerShell настолько хорошо интегрирован с платформой .NET и является настолько зрелым продуктом, что я думаю, было бы неразумно игнорировать его как минимум как возможное решение. Большинство серверных продуктов, выпускаемых Microsoft, теперь поддерживают PowerShell для своего интерфейса сценариев, включая Microsoft Exchange и Microsoft SQL Server.

1
ответ дан 27 November 2019 в 04:56
поделиться

LINQPad может работать как IDE фрагмента кода. Приложение очень маленькое и легкое. Это бесплатно (как в пиве), но не с открытым исходным кодом. Автозаполнение стоит дополнительно, но не так много ($ 19).

Изменить: после более внимательного прочтения комментариев в этом сообщении я не думаю, что LINQPad - это то, что вам нужно. Вам нужно что-то, что может программно оценивать тысячи маленьких скриптов динамически, верно? Я очень легко делал это на работе, используя Iron Ruby. Если вы хотите использовать язык DLR, это, вероятно, будет более осуществимо. Я также проделал аналогичную работу с некоторым кодом, который мог оценивать лямбда-выражение C #, переданное в виде строки, но это было чрезвычайно ограничено.

4
ответ дан 27 November 2019 в 04:56
поделиться

Я считаю, что Mono имеет mint , интерпретатор, который они используют перед реализацией JIT для данной платформы. Хотя в документации на официальном сайте (например, Runtime ) говорится, что это всего лишь промежуточное состояние перед консолидацией дрожащей виртуальной машины, я почти уверен, что это было там, когда я в последний раз компилировал ее в Linux. К сожалению, я не могу сейчас это проверить, но, возможно, он идет в том направлении, в котором вы хотите.

Хотя в документации на официальном сайте (например, Runtime ) говорится, что это всего лишь промежуточное состояние перед консолидацией дрожащей виртуальной машины, я почти уверен, что это было там, когда я в последний раз компилировал ее в Linux. К сожалению, я не могу это проверить прямо сейчас, но, возможно, он идет в том направлении, в котором вы хотите.

Хотя в документации на официальном сайте (например, Runtime ) говорится, что это всего лишь промежуточное состояние перед консолидацией дрожащей виртуальной машины, я почти уверен, что это было там, когда я в последний раз компилировал ее в Linux. К сожалению, я не могу это проверить прямо сейчас, но, возможно, он идет в том направлении, в котором вы хотите.

0
ответ дан 27 November 2019 в 04:56
поделиться
-1
ответ дан 27 November 2019 в 04:56
поделиться

I faced the same problem. In one project I was looking to provide a generic way to specify conditions controlling when a certain letter has to be generated. In another project the conditions were controlling how cases were assigned to queues. In both of them The following solution worked perfectly:

  1. The Language for the snippets - I chose JScript so that I do not have to worry about variable types.
  2. The Compilation - yes it requires full trust, but you can place your code in a separate assembly and give it full trust. Do not forget to mark it with AllowPartiallyTrustedCaller attribute.
  3. Number of code snippets - I treated every snippet as a method, not a class. This way multiple methods can be combined into a single assembly
  4. Disk usage - I did all compilation in memory without saving the assembly to disk. It also helps if you need to reload it.

All of this works in production without any problems

Edit

Just to clarify 'snippet' - The conditions I am talking about are just boolean expressions. I programatically add additional text to turn it to methods and methods to compilable classes.

Also I can do the same with C# although I still think JScript is better for code snippets

And BTW my code is open source feel free to browse. Just keep in mind there is a lot of code there unrelated to this discussion. Let me know if you need help to locate the pieces concerning the topic

0
ответ дан 27 November 2019 в 04:56
поделиться

Мне нужно оценить 10000+ маленьких скрипты, которые все разные, собрать их все было бы просто очень медленно

Их интерпретация будет еще более мучительно медленной. У нас есть аналогичная проблема, которую мы решаем следующим образом:

Мы используем проект Gold Parser для анализа исходного кода и преобразования его в «общий язык» на основе XML. Мы запускаем это через преобразование, которое генерирует исходный код VB.Net (просто потому, что он нечувствителен к регистру). Затем мы компилируем их, используя среду выполнения .Net в отдельную DLL, и вызываем это, используя строго ограниченный доступ.

Похоже, вы создаете что-то вроде динамического веб-сайта, на котором люди могут создавать собственные модули или фрагменты функциональности, но используя В C # для этого возникает несколько основных проблем; C # должен быть скомпилирован, и единственный способ обойти это - перехватить его во время выполнения, а это невозможно, и даже если вы скомпилируете каждый фрагмент, вы получите 10 000 DLL, что непрактично и непригодно для использования.

Если ваши фрагменты редко меняются, я бы подумал о том, чтобы программно объединить их в единый набор источников, каждый из которых имеет уникальное имя, а затем скомпилировать их за один раз (или как синхронизированный процесс каждые 10 минут?). Это то, что мы делаем, так как это также позволяет «управлять версиями» сеансов людей, чтобы они продолжали использовать версию DLL, которая была у них в начале своего сеанса, но когда каждый сеанс перестает использовать старую версию, она удаляется.

Если ваши фрагменты регулярно меняются в течение дня, тогда я бы посоветовал вам вместо этого взглянуть на интерпретируемый язык сценариев, даже на PHP, и смешать ваши языки в зависимости от требуемых функций. Такие продукты, как CScript и LinqPad, используют CodeDomProvider, потому что вам нужно где-то иметь IMSL, если вы хотите программировать скомпилированную логику.

Единственный другой вариант - написать свой собственный интерпретатор и использовать отражение для доступа ко всем другим библиотекам, к которым вам нужно получить доступ, но это чрезвычайно сложно и ужасно.

Поскольку ваши требования фактически недостижимы, я бы посоветовал вам взять сделайте шаг назад и найдите способ снять одно или несколько ограничений. Независимо от того, найдете ли вы среду FullTrust для компиляции ваших фрагментов, устраните необходимость в полной поддержке кода (т. Е. Перейдите к поддержке интерпретируемых фрагментов кода) или даже измените всю структуру на что-то, отличное от .Net.

Я бы посоветовал вам сделать шаг назад и найти способ снять одно или несколько ограничений. Независимо от того, найдете ли вы среду FullTrust для компиляции ваших фрагментов, устраните необходимость в полной поддержке кода (т. Е. Перейдите к поддержке интерпретируемых фрагментов кода) или даже измените всю структуру на что-то не .Net.

Я бы посоветовал вам сделать шаг назад и найти способ снять одно или несколько ограничений. Независимо от того, найдете ли вы среду FullTrust для компиляции ваших фрагментов, устраните необходимость в полной поддержке кода (т. Е. Перейдите к поддержке интерпретируемых фрагментов кода) или даже измените всю структуру на что-то, отличное от .Net.

5
ответ дан 27 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: