Функция Compiler-as-a-Service уже давно доступна в Mono , и есть признаки того, что она может появиться в .NET 5 или 6, но она недоступна в .NET 4 .
Если вам, безусловно, нужно работать в .NET (обратите внимание, что Mono отлично работает на Windows, и вы ничего не теряете при запуске Mono), одним из интересных вариантов может быть изучение того, насколько сложно это будет сделать. порт Mono.CSharp
в .NET. Я имею в виду, в конечном счете, в какой-то момент он генерирует байт-код CIL, который работает одинаково во всех реализациях CLI, будь то Mono, .NET, DotGNU, Rotor, Bartok или любой другой.
В остальном ваши параметры почти такие же, как и всегда: генерируйте файлы и вызывайте компилятор командной строки, используйте деревья DLR, используйте облегченную генерацию кода, используйте Reflection.Emit
, используйте CodeDOM, используйте CSharpCodeProvider
, создайте свой собственный язык сценариев, хост какого-либо другого языка сценариев или хост DLR.
Я бы, наверное, выбрал последнее: хостинг DLR абсолютно прост, и он дает вам доступ не только к одному, но и к нескольким хорошим языкам сценариев (на данный момент Ruby, Python, ECMAScript и Scheme) и фактически пользователь может используйте любой язык DLR, который они установили на своем компьютере.