Компиляция из потока?
Компиляция из потока?
Если кто работал с компилятором из командной строки, то там есть местечко для списка компилируемых файлов.
Детали не помню, но не суть.
Меня интересует не видел ли кто варианта компиляции когда список не определен, а файлы получаются последовательно из COM/USB/NET источника?
увы - не работает одним файлом - если сцепить весь набор, то в .Нете ошибки компиляции посыпятся.
Хочется указать где лежит сервис генерации и компилировать поступающий поток без записи на диск.
язык - не проблема - его надо сообщать генератору.
блин, раньше было проще - исходный файл (копиляция) объектный файл (линковка) длл/ехе...
если там 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...