Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683

Динамическая компиляция кода

30.11.2013, 23:52. Показов 1423. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, хочу спросить у вас совет по теории. Код мне не нужен, главное направление
Очень давно я натыкался на такую способность языка, как самокомпилирование, то есть я пишу свою апликаху, после чего, могу прям в ней в виде строки(код) загнать или дать файл *.cs и она его скомпилирует и выполнит. На сколько я помню, это называется рефлекции? Не хочу тратить время, чтобы искать то, что мне не надо, по этому первый вопрос, правильно ли я название запомнил?
И второе, может кто-то делал или имел опыт, если реализовать такую апликаху, можно ли реализовать подобие кэша? То есть, чтобы я дал ей файлы, она их скомпилила, засунула в кэш и при повторном запуске могла им пользоваться.
Вот такие вопросы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2013, 23:52
Ответы с готовыми решениями:

Динамическая компиляция кода
Добрый день, возник следующий вопрос. Есть основная программа, стандартная windows форма, в которой пользователем заполняются поля...

Динамическая компиляция кода
Доброго времени суток, уважаемые форумчане. Возникла такая проблема: Приложение делает post запрос и в ответ получает код метода в...

Динамическая компиляция кода
Здравствуйте, Есть вот такой код namespace ConsoleCompiler { internal class Program { private static void...

7
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
01.12.2013, 01:14
1) Reflection конечно тут используется, но это называется позднее связывание.
2) Перебилдить проще чем заниматься организацией кэша и различением его содержимого. Можно завести библиотеку исходных кодов и взвалить на юзера бремя классификации и наименования содержимого этой библиотеки исходников.
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 11:19
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
И второе, может кто-то делал или имел опыт, если реализовать такую апликаху, можно ли реализовать подобие кэша?
Это будет кэш чего? И главное зачем?

Один из примеров использования:

Есть куча Web сервисов, надо создать приложение, которое будет работать с этими сервисами без перекомпиляции, пользователь задает адрес, выбирает метод, инициализирует параметры и вызывает метод сервиса, смотрит результат.

Используем wsdl, которая генерит нам прокси класс. Далее мы его компилим в сборку и сохраняем в бд, на диске, и т.д. После берем из нее созданный тип, методы и отображаем пользователю и т.д., после это дергаем сервис.
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
01.12.2013, 13:37  [ТС]
Я хоть в правильном месте тему создал? Меня интересует минимум консольное приложение, без веб-сервисов. И, видимо, я плохо объяснил, что имею ввиду по кэшем, сейчас попробую еще раз
Суть такая, лежит моя ЕХЕ, которая описывает некоторый набор интерфейсов, классов... Далее подключаются скрипты, то есть любой по своим нуждам пишет *.cs файлик используя интерфейсы с моей ЕХЕ и ложит рядом с ЕХЕ, запускает ее и ЕХЕ компилит это все и в итоге мы имеем мой функционал + функционал описанный в скриптах. По сколько всем известно, что чем больше файлов и чем больше сами файлы, то компиляция проходит дольше, по этому каждый раз компилить заново не вариант. Я провел некоторый ресерч в этой сфере и вроде наткнулся на то, что такое кэширование выполняется в dll. А потом при старте ЕХЕ проверять, если dll свежая, то загружать ее, если нет, то перекомпилить все. Это реализуется за счет Assemblies.
Верно ли я классифицировал нужные мне компоненты или может еще есть варианты?
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 13:42
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
Суть такая, лежит моя ЕХЕ, которая описывает некоторый набор интерфейсов, классов... Далее подключаются скрипты, то есть любой по своим нуждам пишет *.cs файлик используя интерфейсы с моей ЕХЕ и ложит рядом с ЕХЕ
Если он может написать *.cs, то пусть сам соберет и кладет рядом уже сборку.

Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
По сколько всем известно, что чем больше файлов и чем больше сами файлы, то компиляция проходит дольше
По опыту могу сказать, не важно какой файл вы компилите 20 строк или 2000 компиляция занимает около 2 сек, по этому лучше все собирать в один файл и его компилить.

Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
Верно ли я классифицировал нужные мне компоненты или может еще есть варианты?
Ну такой подход имеет право на жизнь почему нет.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
01.12.2013, 13:52
проще сделать в своей ехе кнопку "перекомпилироваться" и всё делов
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
01.12.2013, 21:51  [ТС]
Ну предполагается, что сам код ЕХЕ скрытый, то есть предоставляет некий интерфейс для работы, а другие, при помощи скриптов используют его.
Получается вот как:
C#
1
2
3
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parms = new CompilerParameters(getReferenceAssemblies(), path);
CompilerResults results = provider.CompileAssemblyFromFile(parms, files);
Добавляем стандартные Assemblies, + добавляем саму ЕХЕ, чтобы скрипты внутри dll видели функционал ЕХЕ. Потом оно компилит в dll и все круто. Скрипты парсятся, если что выдает ошибки. Внутри скриптов могу использовать методы из ЕХЕшника.

Теперь вот думаю, как использовать классы из dll внутри ЕХЕ) Может знаете?
После компиляции в dll у меня остается поле с Assemly этой dll и я могу ее проитерировать на ее содержимое.
C#
1
2
3
4
            foreach (Type t in assembly.GetTypes())
            {
 
            }
А вот как их создать не знаю)

Добавлено через 16 минут
Пытался вот через Activator.CreateInstance. И оно создает объект, конструктор отрабатывает, но вот, а как мне вызвать метод от туда, если тип на момент компиляции ЕХЕ не известен.

Добавлено через 13 минут
Хотя, видимо, это не логично создавать эти объекты внутри EXE если это он предоставляет интерфейс для скриптов... Наверно так) Видимо разобрался. Всем спасибо.
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 21:53
Цитата Сообщение от TGrey[WoLf] Посмотреть сообщение
Пытался вот через Activator.CreateInstance. И оно создает объект, конструктор отрабатывает, но вот, а как мне вызвать метод от туда, если тип на момент компиляции ЕХЕ не известен.
Создайте интерфейс, любой тип из собраной сборки должен его реализовывать, тогда созданный объект просто кастуете к интерфейсу и вызываете метод(ы). Или рефлексия вам в помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2013, 21:53
Помогаю со студенческими работами здесь

Динамическая компиляция кода
Приветствую всех. Что мы имеем. А имеем мы следующую задачу: Динамическое создание объектов (например кнопок). Объявление...

Динамическая компиляция кода
Всем привет! Как в C# можно динамически, то есть во время выполнения программы, обратиться к одному из объектов формы (например,...

Динамическая компиляция кода
Мне нужна динамическая компиляция кода в приложении из файла какого то с кодом... при этом мне надо что бы этот текст выполнялся в самой...

Динамическая компиляция исходного кода
Привет всем. Надеюсь что я не один кто хотел написать билдер на C#. У меня имеется код ,находящийся в RichTextBox.Text (Это форма). ...

Динамическая компиляция кода в приложении Windows Forms
Кто может объяснить как использовать динамическую компиляцию кода в проекте с win forms? Мне необходима программа, которая бы считывала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru