Привет, Хабр! Представляю вашему вниманию перевод статьи "Using Reflection.Emit to Precompile Expressions to MSIL" автора Steve Marsh.
Классы в этом проекте позволяют анализировать текстовые выражения, введенные пользователем, и компилировать их на сборку .NET. Эта сборка может выполняться «на лету» или сохраняться в DLL. Предварительная компиляция выражений позволяет обеспечить высокий уровень переносимости и позволяет очень эффективно оценивать введенную пользователем логику. Кроме того, мы можем использовать средство ildasm.exe от Microsoft для открытия и проверки создаваемого базового кода MSIL. Есть много интересных функций, которые поставляются с платформой .NET, на мой взгляд пространство имен Reflection.Emit предлагает куда больше, чем вы сможете найти. Пространство имен Reflection.Emit позволяет создавать собственный код .NET во время выполнения, динамически создавая типы .NET и вставляя инструкции MSIL в тело. MSIL — промежуточный язык Microsoft для платформы .NET. IL — это то, во что ваш код C # и VB.NET компилируется и отправляется в JIT-компилятор при запуске .NET-программ. MSIL — очень низкоуровневый язык, который очень быстрый, и работа с ним дает вам исключительный контроль над вашими программами. Я не буду вдаваться в подробности о MSIL в этой статье, но есть несколько других ресурсов, доступных в Интернете, и если вам интересно узнать побольше, я включил некоторые ссылки в конце этой статьи.
Введение
Классы в этом проекте позволяют анализировать текстовые выражения, введенные пользователем, и компилировать их на сборку .NET. Эта сборка может выполняться «на лету» или сохраняться в DLL. Предварительная компиляция выражений позволяет обеспечить высокий уровень переносимости и позволяет очень эффективно оценивать введенную пользователем логику. Кроме того, мы можем использовать средство ildasm.exe от Microsoft для открытия и проверки создаваемого базового кода MSIL. Есть много интересных функций, которые поставляются с платформой .NET, на мой взгляд пространство имен Reflection.Emit предлагает куда больше, чем вы сможете найти. Пространство имен Reflection.Emit позволяет создавать собственный код .NET во время выполнения, динамически создавая типы .NET и вставляя инструкции MSIL в тело. MSIL — промежуточный язык Microsoft для платформы .NET. IL — это то, во что ваш код C # и VB.NET компилируется и отправляется в JIT-компилятор при запуске .NET-программ. MSIL — очень низкоуровневый язык, который очень быстрый, и работа с ним дает вам исключительный контроль над вашими программами. Я не буду вдаваться в подробности о MSIL в этой статье, но есть несколько других ресурсов, доступных в Интернете, и если вам интересно узнать побольше, я включил некоторые ссылки в конце этой статьи.