Динамическая компиляция (без ехе) - 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");