С# csc компилирует исходный код из памяти
Я хотел бы скомпилировать исходный код С# из строки. Я знаю, что это возможно с помощью CodeDom, и я хотел бы знать, можно ли это сделать с помощью компилятора командной строки. Например, скажем, я загружаю следующий код в строку:
static void Main(string[] args)
{
}
Есть ли способ скомпилировать этот код в файл aС# executable (.exe) без, сначала записывая этот код на мой жесткий диск в виде файла класса С# (.cs)?
Это была первая часть моего вопроса. Вторая часть предполагает, что это на самом деле невозможно. Скажем, у меня было три разностных класса (загружено на три отдельные строки). Как я могу использовать компилятор командной строки для компиляции каждого из этих трех классов в один общий исполняемый файл? Я нашел несколько примеров в Интернете, но они, похоже, очень расплывчаты, к сожалению.
Любая помощь, или указатели в правильном направлении, очень ценится.
Спасибо,
Эван
Нет, вы не можете использовать csc.exe без исходного файла. Каково ваше обоснование необходимости использования csc.exe? Вы нашли что-то, что CodeDOM не обрабатывает правильно? Параметр командной строки у вас нет эквивалента CodeDOM для?
Команда С# упомянула, что будущая версия может поддерживать compiler-as-a-service, где csc.exe просто станет тонкой оболочкой вокруг DLL компилятора, что вы также можете звоните напрямую. Но вам все равно нужно обойти csc.exe.
Вы можете использовать System.CodeDom.Compiler.CompilerParameters
, чтобы получить CodeDOM, чтобы дать вам те же результаты, что и csc.exe. Проверьте журнал сборки, чтобы узнать, какие параметры Visual Studio переходят на csc.exe. В частности, архитектура (AnyCPU
vs x86
) может сильно повлиять, поскольку она определяет, будет ли результирующая сборка совместима с 32-разрядными DLL при запуске в Windows x64. Или вы можете использовать corflags
для исправления архитектуры после компиляции.
Я искал, можно ли направить CSC для компиляции из STDIN, но я не вижу этого, поэтому я думаю, что часть первая вряд ли будет иметь место.
Однако вторая часть проще.
команда, такая как
csc /out:test.exe *.cs
Скомпилирует все .CS файлы в текущем каталоге в test.exe.
Здесь вы можете найти другие примеры:
http://msdn.microsoft.com/en-us/library/78f4aasd.aspx
Изменить: Я просто подумал о ужасном хаке, который может помочь. Это ужасно!
Как создать файл в качестве своего рода URL-адреса UNC/Service. Мое мышление заключается в том, что вы можете связать NetworkStream с UNC или конечной точкой некоторого HttpHandler или webservice; после того, как вы прочитали от вас, вы просто вернете строку в поток.
Это действительно взломанно, и я понятия не имею, будет ли это работать!
- Вопросы
- Compiler-construction
- С# csc компилирует исходный код из памяти