I need compile and execute code via CSharpCodeProvider int the current context, for example:
using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
namespace ConsoleApplication1
{
public class Program
{
public static void WriteMessage(string message)
{
Console.WriteLine(message);
}
static void Main(string[] args)
{
var compiler = new CSharpCodeProvider();
var parms = new CompilerParameters
{
GenerateExecutable = false,
GenerateInMemory = true,
};
parms.ReferencedAssemblies.Add("System.dll");
var results = compiler.CompileAssemblyFromSource(parms, new string[]
{@" using System;
class MyClass
{
public void Message(string message)
{
Program.WriteMessage(message);//Console.Write(message);
}
}"});
if (results.Errors.Count == 0)
{
var myClass = results.CompiledAssembly.CreateInstance("MyClass");
myClass.GetType().
GetMethod("Message").
Invoke(myClass, new[] {"Hello World!"});
}
else
{
foreach (var error in results.Errors)
{
Console.WriteLine(error);
}
}
Console.Read();
}
}
}
How you can see, i try to call Program.WriteMessage
from the compiled code but i only get errors. Why?