вставка кода
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 20.06.14 19:50
Оценка:
допустим пишу консольное приложение
хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)
вроде так

Main(){
var code = Console.ReadLine();

Execute(code);

ExecuteOtherCode()

}

слышал про Emit из Reflection но это сложновато
Interception.LightInjectt, NUnity
вроде могут быть полезны, но хочется только .net стандартный использовать
Re: вставка кода
От: Степанов Андрей  
Дата: 21.06.14 06:06
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>допустим пишу консольное приложение

R>хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)
R>вроде так

R>
R>Main(){
R>var code = Console.ReadLine();

R>Execute(code);

R>ExecuteOtherCode()

R>}
R>

R>слышал про Emit из Reflection но это сложновато
R>Interception.LightInjectt, NUnity
R>вроде могут быть полезны, но хочется только .net стандартный использовать

Я в своё время (ещё на .net 1.1) делал так: делал сборку вызовом Microsoft.CSharp.Compiler.Compile, потом её загружал и использовал.
Наверняка сейчас это можно сделать проще, но как вариант — можно и так
Re: вставка кода
От: abibok  
Дата: 21.06.14 07:07
Оценка:
Roslyn
Re: вставка кода
От: andyag  
Дата: 21.06.14 10:24
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>допустим пишу консольное приложение

R>хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)

http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime
Re[2]: вставка кода
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 21.06.14 18:50
Оценка:
Здравствуйте, Степанов Андрей, Вы писали:

СА>Здравствуйте, -rsdn-, Вы писали:


R>>допустим пишу консольное приложение

R>>хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)
R>>вроде так

R>>
R>>Main(){
R>>var code = Console.ReadLine();

R>>Execute(code);

R>>ExecuteOtherCode()

R>>}
R>>

R>>слышал про Emit из Reflection но это сложновато
R>>Interception.LightInjectt, NUnity
R>>вроде могут быть полезны, но хочется только .net стандартный использовать

СА>Я в своё время (ещё на .net 1.1) делал так: делал сборку вызовом Microsoft.CSharp.Compiler.Compile, потом её загружал и использовал.

СА>Наверняка сейчас это можно сделать проще, но как вариант — можно и так

так и делаю, но не понятно как в запущеной программе сделать вставку такого кода (из консоли). Emit — но я не сообразил пока как в него переобразовать код
Re: вставка кода
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 21.06.14 19:08
Оценка:
Здравствуйте, -rsdn-, Вы писали:

http://www.drdobbs.com/generating-code-at-run-time-with-reflect/184416570?pgno=5
Re[3]: вставка кода
От: Степанов Андрей  
Дата: 22.06.14 06:33
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>Здравствуйте, Степанов Андрей, Вы писали:


СА>>Здравствуйте, -rsdn-, Вы писали:


R>>>допустим пишу консольное приложение

R>>>хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)
R>>>вроде так

R>>>
R>>>Main(){
R>>>var code = Console.ReadLine();

R>>>Execute(code);

R>>>ExecuteOtherCode()

R>>>}
R>>>

R>>>слышал про Emit из Reflection но это сложновато
R>>>Interception.LightInjectt, NUnity
R>>>вроде могут быть полезны, но хочется только .net стандартный использовать

СА>>Я в своё время (ещё на .net 1.1) делал так: делал сборку вызовом Microsoft.CSharp.Compiler.Compile, потом её загружал и использовал.

СА>>Наверняка сейчас это можно сделать проще, но как вариант — можно и так

R>так и делаю, но не понятно как в запущеной программе сделать вставку такого кода (из консоли). Emit — но я не сообразил пока как в него переобразовать код


Скомпилированную сборку надо загрузить (Assembly.Load, кажется), получить из неё тип и вызвать его метод через Reflection (GetType,Type.Invoke...). Потом, возможно, сборку надо выгрузить.
Re: вставка кода
От: Pek2014 Россия  
Дата: 23.06.14 07:46
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>
R>Main(){
R>var code = Console.ReadLine();
R>Execute(code);
R>ExecuteOtherCode()
R>}
R>

R>слышал про Emit из Reflection но это сложновато

Runtime-генерирование .Net-кода для тех, кому некогда
http://habrahabr.ru/post/199266/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.