допустим пишу консольное приложение
хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)
вроде так
Main(){
var code = Console.ReadLine();
Execute(code);
ExecuteOtherCode()
}
слышал про Emit из Reflection но это сложновато
Interception.LightInjectt, NUnity
вроде могут быть полезны, но хочется только .net стандартный использовать
Здравствуйте, -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, потом её загружал и использовал.
Наверняка сейчас это можно сделать проще, но как вариант — можно и так
Здравствуйте, -rsdn-, Вы писали:
R>допустим пишу консольное приложение
R>хочу ввести код в консоли, скомпилировать его и выполнить, но сделать это в моей же консоли (с доступом к ее адресам, просто как вставку кода)
http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime
Здравствуйте, Степанов Андрей, Вы писали:
СА>Здравствуйте, -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 — но я не сообразил пока как в него переобразовать код
Здравствуйте, -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...). Потом, возможно, сборку надо выгрузить.
Здравствуйте, -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/