Advertisement
f0rkB0mb

Compile C# via Code

Dec 29th, 2012
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.66 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8.  
  9. #region Additional needed Namespaces
  10. using System.CodeDom;
  11. using System.CodeDom.Compiler;
  12. using Microsoft.CSharp;
  13. #endregion
  14.  
  15. namespace CompileViaCode
  16. {
  17.     public partial class Form1 : Form
  18.     {
  19.         string path = "", code = "", nl = Environment.NewLine;
  20.  
  21.         public Form1()
  22.         {
  23.             InitializeComponent();
  24.         }
  25.  
  26.         private void Form1_Load(object sender, EventArgs e)
  27.         {
  28.             tbSave.Text = "";
  29.             tbCode.Text = "using System;" + nl +
  30.                         "namespace Test" + nl +
  31.                         "{" + nl +
  32.                         "\tclass Prog" + nl +
  33.                         "\t{" + nl +
  34.                         "\t\tstatic void Main()" + nl +
  35.                         "\t\t{" + nl +
  36.                         "\t\t\tConsole.WriteLine(\"Hello World\");" + nl +
  37.                         "\t\t\tConsole.ReadLine();" + nl +
  38.                         "\t\t}" + nl +
  39.                         "\t}" + nl +
  40.                         "}";
  41.         }
  42.  
  43.         private void tbSave_TextChanged(object sender, EventArgs e)
  44.         {
  45.             if (!tbSave.Text.EndsWith(".exe"))
  46.                 path = string.Format(Application.StartupPath + @"\Data\{0}.exe", tbSave.Text);
  47.             else
  48.                 path = string.Format(Application.StartupPath + @"\Data\{0}", tbSave.Text);
  49.  
  50.             if (!string.IsNullOrEmpty(tbSave.Text))
  51.                 btnCompile.Enabled = true;
  52.             else
  53.                 btnCompile.Enabled = false;
  54.         }
  55.  
  56.         private void tbCode_TextChanged(object sender, EventArgs e)
  57.         {
  58.             code = tbCode.Text;
  59.         }
  60.  
  61.         private void btnCompile_Click(object sender, EventArgs e)
  62.         {
  63.             #region For VS 2005:
  64.             CSharpCodeProvider cp = new CSharpCodeProvider();
  65.             ICodeCompiler icc = cp.CreateCompiler();
  66.             #endregion
  67.  
  68.             #region VS 2008 or higher
  69.             CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
  70.             #endregion
  71.             string sv = path;
  72.  
  73.             CompilerParameters param = new CompilerParameters();
  74.             param.GenerateExecutable = true;
  75.             param.OutputAssembly = sv;
  76.  
  77.             #region For VS 2005:
  78.             CompilerResults cr = icc.CompileAssemblyFromSource(param, code);
  79.             #endregion
  80.  
  81.             #region VS 2008 or higher
  82.             CompilerResults res = codeProvider.CompileAssemblyFromSource(param, code);
  83.             #endregion
  84.  
  85.             string err = "";
  86.             if (cr.Errors.Count > 0)
  87.             {
  88.                 foreach (CompilerError er in cr.Errors)
  89.                     err += "Line: " + er.Line + nl +
  90.                         "Error Nr: " + er.ErrorNumber + nl +
  91.                         "Msg: " + er.ErrorText + nl + nl;
  92.                 MessageBox.Show(err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  93.             }
  94.             else
  95.             {
  96.                 err += "Build Successful." + nl + "You like to start?";
  97.                 if (MessageBox.Show(err, "Success", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
  98.                     System.Diagnostics.Process.Start(path);
  99.             }
  100.         }
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement