Динамическая компиляция (без ехе) - C#
Формулировка задачи:
Всем привет!
Я использую след. код для компиляции "кода на ходу"
Т.е я передаю код ( в переменной source ) и мне нужно его сразу выполнить без компиляции в exe
Этот код рабочий, но если я добавлю любую другую библиотеку (к примеру Diagnostics) и использую ее, выходит ошибка, почему так получается?
Т.е к примеру такой код
Как же избавиться от ошибки?
(ошибка: Невозможно загрузить файл или сборку "file:///C:\Users\objaa\AppData\Local\Temp\zyd5w24i.dll" или один из зависимых от них компонентов. Не удается найти указанный файл.)
Листинг программы
- string source = "using System; public class FooClass { public string Execute() { Console.WriteLine(\"1\"); return \"output!\";}}";
- using (Microsoft.CSharp.CSharpCodeProvider foo = new Microsoft.CSharp.CSharpCodeProvider())
- {
- var res = foo.CompileAssemblyFromSource(
- new System.CodeDom.Compiler.CompilerParameters()
- {
- GenerateInMemory = true
- },
- source
- );
- var type = res.CompiledAssembly.GetType("FooClass");
- var obj = Activator.CreateInstance(type);
- var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
- Console.Write(output);
- }
Листинг программы
- string source = "using System; using System.Diagnostics; public class FooClass { public string Execute() { Process.Start(\"explorer\"); Console.WriteLine(\"1\"); return \"output!\";}}";
Решение задачи: «Динамическая компиляция (без ехе)»
textual
Листинг программы
- var parameters = new CompilerParameters();
- parameters.GenerateInMemory = true;
- parameters.ReferencedAssemblies.Add("System.dll");
- parameters.ReferencedAssemblies.Add("mscorlib.dll");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д