C# eval内にフォーム

C# eval内でフォームを扱う事が出来ます。

using System;
using System.Reflection;
using System.CodeDom.Compiler;
using System.Windows.Forms;
using System.Diagnostics;

public class CompileInvoke : Form
{
    private static string cs =@"
        using System.Windows.Forms; //この行を追加

        public class CSHello
        {
            public static void Main()
            {
                System.Console.WriteLine(""Hello C# World!"");
                MessageBox.Show(""ok"");
            }
        }";

    public static void Main()
    {
        CompilerParameters param = new CompilerParameters();
        Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies();

        foreach (Assembly a in asms) //全DLL取得
        {
            if(a.GetName().GetPublicKeyToken().GetLength(0)!=0)
                param.ReferencedAssemblies.Add(a.GetName().Name+".dll");
        }

        param.OutputAssembly = "b.exe";
        param.CompilerOptions = "/target:winexe";

        CodeDomProvider cc = CodeDomProvider.CreateProvider("CSharp");
        CompilerResults cr = cc.CompileAssemblyFromSource(param, cs);
        //CompilerResults cr = cc.CompileAssemblyFromFile(param, "b.cs");
        Process.Start("b.exe");
   }
}

Leave a Reply