C # CSC компилировать исходный код из памяти - PullRequest
4 голосов
/ 15 августа 2011

Я хотел бы скомпилировать c # исходный код из строки. Я знаю, что это возможно с помощью CodeDom, и я хотел бы знать, возможно ли это сделать с помощью компилятора командной строки. Например, скажем, я загружаю следующий код в строку:

static void Main(string[] args)
        {           

        }

Есть ли способ скомпилировать этот код в исполняемый файл ac # (.exe) без сначала записать этот код на мой жесткий диск в виде файла класса C # (.cs)?

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

Любая помощь или указатели в правильном направлении очень ценятся.

Спасибо, Evan

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Нет, вы не можете использовать csc.exe без исходного файла. Каково ваше обоснование необходимости использования csc.exe? Вы нашли что-то, что CodeDOM не обрабатывает правильно? Опция командной строки, для которой у вас нет эквивалента CodeDOM?

Команда C # упомянула, что будущая версия может поддерживать compiler-as-a-service , где csc.exe просто станет тонкой оболочкой для DLL-библиотеки компилятора, которую вы также можете вызывать напрямую. Но вам все равно нужно обойти csc.exe.

Вы можете использовать System.CodeDom.Compiler.CompilerParameters, чтобы получить CodeDOM для получения тех же результатов, что и csc.exe. Проверьте журнал сборки, чтобы узнать, какие параметры Visual Studio передает в csc.exe. В частности, архитектура (AnyCPU против x86), вероятно, будет иметь большое значение, так как она определяет, будет ли полученная сборка совместима с 32-разрядными библиотеками DLL при запуске в Windows x64. Или вы можете использовать corflags для исправления архитектуры после компиляции.

2 голосов
/ 15 августа 2011

Я искал, можно ли указать CSC для компиляции из STDIN, но я не могу этого увидеть, поэтому я думаю, что первая часть вряд ли будет иметь место.

Однако вторая часть проще.

команда, такая как

csc /out:test.exe *.cs

Компилирует все файлы .CS из текущего каталога в test.exe. Вы можете найти другие примеры здесь:

http://msdn.microsoft.com/en-us/library/78f4aasd.aspx

Редактировать: Я просто подумал об ужасном хаке, который может помочь. Это ужасно однако! А как насчет создания вашего файла как своего рода UNC / Service URL? Я думаю, что вы можете связать NetworkStream с UNC или конечной точкой какого-то HttpHandler или веб-сервиса; после прочтения вы просто вернете строку в поток.

Хотя это действительно глупо, и я понятия не имею, сработает ли это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...