мне нужно оценить маленькие 10000 + скрипты, которые все Дифференц, компиляции все из них будет просто резко медленно
Интерпретация этих вопросов будет еще более болезненно медленной. У нас есть аналогичная проблема, которую мы адресуем следующим образом:
Мы используем проект Gold Parser для анализа исходного кода и преобразования его в «общий язык» на основе XML. Мы запускаем это через преобразование, которое генерирует исходный код VB.Net (просто потому, что он нечувствителен к регистру). Затем мы компилируем их с использованием среды .NET в автономную DLL и вызываем это с использованием строго ограниченного доступа.
Звучит так, как будто вы создаете нечто вроде динамичного веб-сайта, где люди могут создавать пользовательские модули или фрагменты функциональности, но с помощью C# для этого возникает пара основных проблем; C# должен быть скомпилирован, и единственный способ обойти это - использовать его во время выполнения, и это невозможно, и даже если вы выполните компиляцию каждого фрагмента, тогда вы получите 10 000 DLL, что нецелесообразно и непригодно.
Если ваши фрагменты редко меняются, я бы подумал, что они программно обертывают их в один набор источников, каждый из которых имеет уникальное имя, а затем скомпилирует их одним выстрелом (или как синхронизированный процесс каждые 10 минут?). Это то, что мы делаем, так как оно также позволяет «управлять версиями» сессий людей, поэтому они продолжают использовать версию DLL, которую они имели в начале своего сеанса, но когда каждый сеанс перестает использовать старую версию, он удаляется.
Если ваши фрагменты регулярно меняются в течение дня, я предлагаю вам вместо этого интерпретировать язык сценариев, даже PHP, и смешивать свои языки в зависимости от требуемых функций. Такие продукты, как CScript и LinqPad, используют CodeDomProvider, потому что вы должны иметь IMSL где-нибудь, если хотите запрограммировать скомпилированную логику.
Единственный другой вариант - написать собственный интерпретатор и использовать отражение для доступа ко всем другим библиотекам, которые вам нужны для доступа, но это чрезвычайно сложно и ужасно.
Поскольку ваши требования являются фактически недостижимыми, я предлагаю вам сделать шаг назад и выяснить способ устранения одного или нескольких ограничений. Независимо от того, находите ли вы среду FullTrust для компиляции своих фрагментов, удалите необходимость в полной поддержке кода (т. Е. Перейдите к интерпретации поддержки фрагмента кода) или даже измените всю структуру на что-то не .Net.
Вы можете уточнить, почему вы должны C# синтаксис без выполнения компиляции? Из-за того, как указан язык C# и способ реализации примитивных типов CLR, я не верю, что то, о чем вы просите, даже возможно. Но я предполагаю, что вам действительно не нужен язык C# для того, что вы пытаетесь сделать. –
1) компиляция во время выполнения включает сборку, для которой требуется полный режим доверия, я работаю над средой среднего доверия asp.net. 2) В каком-то конкретном случае мне нужно оценить 10000+ небольших скриптов, которые все разные, компиляция всех из них будет просто очень медленной, и использование кеша сборок будет бесполезным и быстро уничтожит мой AppPool. –
... 3) Я не хочу писать ничего, кроме C#: p –