Compare commits
	
		
			1 Commits
		
	
	
		
			main
			...
			8cf49afea0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8cf49afea0 | 
							
								
								
									
										80
									
								
								Form1.cs
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								Form1.cs
									
									
									
									
									
								
							@@ -1,80 +0,0 @@
 | 
			
		||||
using Microsoft.CSharp;
 | 
			
		||||
using System;
 | 
			
		||||
using System.CodeDom.Compiler;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel;
 | 
			
		||||
using System.Data;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Drawing;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Forms;
 | 
			
		||||
 | 
			
		||||
namespace DynamicCompilationTest
 | 
			
		||||
{
 | 
			
		||||
    public partial class Form1 : Form
 | 
			
		||||
    {
 | 
			
		||||
        public Form1()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void Form1_Load(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string SomePublicField = "Hello!";
 | 
			
		||||
        int classNumber = 0;
 | 
			
		||||
        private void button1_Click(object sender, EventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            var csc = new CSharpCodeProvider();
 | 
			
		||||
            var parameters = new CompilerParameters(new[] {
 | 
			
		||||
        "mscorlib.dll",
 | 
			
		||||
        "System.Windows.Forms.dll",
 | 
			
		||||
        "System.dll",
 | 
			
		||||
        "System.Drawing.dll",
 | 
			
		||||
        "System.Core.dll",
 | 
			
		||||
        "Microsoft.VisualBasic.dll",
 | 
			
		||||
        "Microsoft.CSharp.dll"});
 | 
			
		||||
            var results = csc.CompileAssemblyFromSource(parameters,
 | 
			
		||||
            @"
 | 
			
		||||
    using System.Windows.Forms;
 | 
			
		||||
    using System.Drawing;
 | 
			
		||||
    using Microsoft.VisualBasic;
 | 
			
		||||
    public class Sample 
 | 
			
		||||
    {
 | 
			
		||||
        public void DoSomething(dynamic form)
 | 
			
		||||
        {
 | 
			
		||||
            Interaction.InputBox(""Testing"", ""Test"");
 | 
			
		||||
            //MessageBox.Show(form.SomePublicField);
 | 
			
		||||
            var b = new Button();
 | 
			
		||||
            b.Text = form.Text;
 | 
			
		||||
            b.Click += (s,e)=>{MessageBox.Show(form.SomePublicField);};
 | 
			
		||||
 | 
			
		||||
            b.Location = new Point((form.ClientSize.Width - b.Width) / 2, (form.ClientSize.Height - b.Height) / 2);
 | 
			
		||||
 | 
			
		||||
            form.Controls.Add(b);
 | 
			
		||||
        }
 | 
			
		||||
    }".Replace("public class Sample", "public class class" + classNumber));
 | 
			
		||||
            //Check if compilation is successful, run the code
 | 
			
		||||
            if (!results.Errors.HasErrors)
 | 
			
		||||
            {
 | 
			
		||||
                var t = results.CompiledAssembly.GetType("class" + classNumber);
 | 
			
		||||
                //var type = results.CompiledAssembly.GetType("Sample");
 | 
			
		||||
                dynamic o = Activator.CreateInstance(t);
 | 
			
		||||
                Debug.WriteLine("Compiled with no errors");
 | 
			
		||||
                o.DoSomething(this);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                var errors = string.Join(Environment.NewLine,
 | 
			
		||||
                    results.Errors.Cast<CompilerError>().Select(x => x.ErrorText));
 | 
			
		||||
                MessageBox.Show(errors);
 | 
			
		||||
            }
 | 
			
		||||
            classNumber++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user