Компиляция из потока?
Компиляция из потока?
Если кто работал с компилятором из командной строки, то там есть местечко для списка компилируемых файлов.
Детали не помню, но не суть.
Меня интересует не видел ли кто варианта компиляции когда список не определен, а файлы получаются последовательно из COM/USB/NET источника?
Чтобы фаилы - не видел. А один файл gcc из stdin обрабатывает. Надо было только язык указывать, а то имени с расширением нет.
Очень подозреваю что нет.
А не вариант записать на виртуальный диск в памяти?
Ну или на stdin перенаправить, но тогда видимо будут отдельные файлы а не проект.
увы - не работает одним файлом - если сцепить весь набор, то в .Нете ошибки компиляции посыпятся.
Хочется указать где лежит сервис генерации и компилировать поступающий поток без записи на диск.
язык - не проблема - его надо сообщать генератору.
блин, раньше было проще - исходный файл (копиляция) объектный файл (линковка) длл/ехе...
идея в том чтобы ничего, кроме результата, на диск не писать.
Даже результат писать не хочется - его тоже можно отдать в выходной поток... на другой хост...
Не знаю - надо ковырять CompileAssemblyFromSourceBatch
втотой параметр перегрузить - если там IEnumerable
может прокатит'
если там IEnumerable
А зачем, места в памяти не хватит?
Compiles an assembly from the specified array of strings containing source code, using the specified compiler settings.
https://learn.microsoft.com/de-de/dotnet/api/system.collec...
Так процесс по определению - последовательный - файл за файлом...
ну а мне нужно - поток за потоком.
и - да - Я не знаю сколько гиг или терр поступит.
ЗЫ. Проблема в том, что требуется передать подготовленный массив строк - со всеми текстами внутри - столько памяти точно не будет.
Остальные методы тоже требуют полной подготовки.
А вот подпихнуть вместо массива что другое - что будет поставлять файлики по мере необходимости/получения - у меня пока не получается.
и - да - Я не знаю сколько гиг или терр поступит.
и считаешь, что компайлер тоже без диска работает?
https://learn.microsoft.com/en-us/dotnet/framework/reflect...
Это же сколько мусора нужно нагенерить для таких размеров?
Тут можно еще порыть, но подозреваю без толку, хотелки нужно ужимать.
Что собаки бешенные делают...
Старался - минимизировал, разместил в памяти, отдаю компилятору...
А они первым делом скидвают все на диск....... кааааааазззззззззззлыыыыыыыыыыыыыыыы
[ResourceExposure(ResourceScope.None)][ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]private CompilerResults FromSourceBatch(CompilerParameters options, string[] sources){if (options == null){throw new ArgumentNullException("options");}if (sources == null)throw new ArgumentNullException("sources");new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();string[] filenames = new string[sources.Length];
CompilerResults results = null;#if !FEATURE_PAL// the extra try-catch is here to mitigate exception filter injection attacks.try{WindowsImpersonationContext impersonation = Executor.RevertImpersonation();try{#endif // !FEATURE_PAL
//
// сссссссуууукккккккккккккккккииииииииииииииии
//for (int i = 0; i < sources.Length; i++){string name = options.TempFiles.AddExtension(i + FileExtension);Stream temp = new FileStream(name, FileMode.Create, FileAccess.Write, FileShare.Read);try{using (StreamWriter sw = new StreamWriter(temp, Encoding.UTF8)){sw.Write(sources);sw.Flush();}}finally{temp.Close();}filenames = name;}results = FromFileBatch(options, filenames);#if !FEATURE_PAL}finally{Executor.ReImpersonate(impersonation);}}catch{throw;}#endif // !FEATURE_PALreturn results;}
Нее, не пойдет...
Они дальше формируют полную командную строку со списком файлов и вызывают стандартный компилятор.. :(
и считаешь, что компайлер тоже без диска работает?
------
А вот это меня сейчас не интересует - если он что-то сбрасывает - плохо, но сейчас другая задача...
Похоже что нет у них возможности делать полное ин-мемору.
Надо еще Розелавн посмотреть
Это же сколько мусора нужно нагенерить для таких размеров?
------
Ну дали тебе десяток-другой баз по паре тысяч таблиц каждая - пиСай обвязку.
Ну или наоборот - пара тысяч юзеров и у каждого пустяковая базенка на десяток-другой таблиц
если он что-то сбрасывает
Так если он что то сбрасывает, то и решение 1й задачи не нужно. Или я что то не понимаю?
Помнишь, я пытался мышу генерить. Ну и на примерах всё работает, а с тем что нужно нет.
десяток-другой баз по паре тысяч таблиц каждая
любишь ты находить проблемные базы. По счастью еще ни разу не встречались подобные монстры.
Или я что то не понимаю?
------
Я надеялся отдавать сгенерированный исходник сразу на вход компилятора.
Сам компилятор, если его строить строго по теории, штука небольшая и вполне себе встраиваемая.
Но! У мелкомягких инстанцирование компилятора не предусмотрено. Вообще.
Все что есть в .Нет - обвязка к вызову csc.exe.
А так - да, задача отпадает - генерируем, пересылаем, пишем и батничком запускаем csc...
Все что есть в .Нет - обвязка к вызову csc.exe.
Из кода нашел? Немного странно конечно.
Но исходники видимо где то есть можно вытащить начинку
Из кода нашел?
-----
угу... чутка одну из имплементаций пролистал.
Но исходники видимо где то есть можно вытащить начинку
-----
я сильно сомневаюсь что там .Нет реализация. обычно чистый Си.