Динамическая компиляция (без ехе) - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Я использую след. код для компиляции "кода на ходу"
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);
            }
Т.е я передаю код ( в переменной source ) и мне нужно его сразу выполнить без компиляции в exe Этот код рабочий, но если я добавлю любую другую библиотеку (к примеру Diagnostics) и использую ее, выходит ошибка, почему так получается? Т.е к примеру такой код
string source =  "using System; using System.Diagnostics; public class FooClass { public string Execute() { Process.Start(\"explorer\"); Console.WriteLine(\"1\"); return \"output!\";}}";
Как же избавиться от ошибки? (ошибка: Невозможно загрузить файл или сборку "file:///C:\Users\objaa\AppData\Local\Temp\zyd5w24i.dll" или один из зависимых от них компонентов. Не удается найти указанный файл.)

Решение задачи: «Динамическая компиляция (без ехе)»

textual
Листинг программы
var parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("mscorlib.dll");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5
Похожие ответы