title: trying to compile and execute C# code programmatically
body: <p>The following is my code :</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Text;
  
  using System.CodeDom.Compiler;
  using System.IO;
  using Microsoft.CSharp;
  using System.Reflection;
  
  namespace DynaCode
  {
  
  class Program
  {
  
      static void Main(string[] args)
      {
  
          string content = File.ReadAllText(@"D:\hi.cs");
          string[] code = new string[content.Length];
          char[] seperators = { '\n','\r','\t' };
          code = content.Split(seperators);
  
  
          CompileAndRun(code);
  
          Console.ReadKey();
  
      }
  
      static void CompileAndRun(string[] code)
      {
          CompilerParameters CompilerParams = new CompilerParameters();
          string outputDirectory = Directory.GetCurrentDirectory();
  
          CompilerParams.GenerateInMemory = true;
          CompilerParams.TreatWarningsAsErrors = false;
          CompilerParams.GenerateExecutable = false;
          CompilerParams.CompilerOptions = "/optimize";
  
          string[] references = { "System.dll"};
  
          CompilerParams.ReferencedAssemblies.AddRange(references);
  
          CSharpCodeProvider provider = new CSharpCodeProvider();
          CompilerResults compile = provider.CompileAssemblyFromSource(CompilerParams, code);
  
          if (compile.Errors.HasErrors)
          {
              string text = "Compile error: ";
              foreach (CompilerError ce in compile.Errors)
              {
                  text += "rn" + ce.ToString();
              }
              throw new Exception(text);
          }
  
          //ExpoloreAssembly(compile.CompiledAssembly);
  
          Module module = compile.CompiledAssembly.GetModules()[0];
          Type mt = null;
          MethodInfo methInfo = null;
  
          if (module != null)
          {
              mt = module.GetType("DynaCore.DynaCore");
          }
  
          if (mt != null)
          {
              methInfo = mt.GetMethod("Main");
          }
  
          if (methInfo != null)
          {
              Console.WriteLine(methInfo.Invoke(null, new object[] { "here in dyna code" }));
          }
      }
  
      static void ExpoloreAssembly(Assembly assembly)
      {
          Console.WriteLine("Modules in the assembly:");
          foreach (Module m in assembly.GetModules())
          {
              Console.WriteLine("{0}", m);
  
              foreach (Type t in m.GetTypes())
              {
                  Console.WriteLine("t{0}", t.Name);
  
                  foreach (MethodInfo mi in t.GetMethods())
                  {
                      Console.WriteLine("tt{0}", mi.Name);
                  }
              }
          }
      }
  }
  }
  </code></pre>
  
  <p>The contents of the hi.cs file is as follows:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.IO;
  
  
  
  namespace DynaCore
  {
  class DynaCore
  {
      static public void Main(string[] args)
      {
  
       Console.WriteLine("hello, this is good");
  
      }
  }
  }
  </code></pre>
  
  <p>This is the error I get when I try to run this program:</p>
  
  <pre><code>System.Exception was unhandled
    Message="Compile error: rnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.16.cs(1,19) : error CS1514: { expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.16.cs(1,19) : error CS1513: } expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.18.cs(1,1) : error CS0116: A namespace does not directly contain members such as fields or methodsrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.20.cs(1,19) : error CS1514: { expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.20.cs(1,19) : error CS1513: } expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.20.cs(1,11) : error CS0101: The namespace '&lt;global namespace&gt;' already contains a definition for 'DynaCore'rnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.22.cs(1,5) : error CS0116: A namespace does not directly contain members such as fields or methodsrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.24.cs(1,23) : error CS1518: Expected class, delegate, enum, interface, or structrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.24.cs(1,40) : error CS1001: Identifier expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.24.cs(1,42) : error CS1518: Expected class, delegate, enum, interface, or structrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.26.cs(1,9) : error CS0116: A namespace does not directly contain members such as fields or methodsrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.30.cs(1,10) : error CS0116: A namespace does not directly contain members such as fields or methodsrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.35.cs(1,9) : error CS1022: Type or namespace definition, or end-of-file expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.37.cs(1,5) : error CS1022: Type or namespace definition, or end-of-file expectedrnc:\\Documents and Settings\\simonjef\\Local Settings\\Temp\\mftbafdt.39.cs(1,1) : error CS1022: Type or namespace definition, or end-of-file expected"
    Source="Compiling"
    StackTrace:
         at DynaCode.Program.CompileAndRun(String[] code) in C:\Documents and Settings\simonjef\My Documents\Visual Studio 2008\Projects\Compiling\Compiling\Program.cs:line 72
         at DynaCode.Program.Main(String[] args) in C:\Documents and Settings\simonjef\My Documents\Visual Studio 2008\Projects\Compiling\Compiling\Program.cs:line 42
         at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
         at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
         at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         at System.Threading.ThreadHelper.ThreadStart()
    InnerException: 
  </code></pre>