FaTaL_ErRoR
FaTaL_ErRoR

Reputation: 123

CodeDOM Not compiling

I wanna build a builder for my application this is the source of the builder

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.CodeDom.Compiler;
using Microsoft.CSharp;

namespace MyAppBuilder
{

    public partial class Form1 : Form
    {
    public Form1()
    {
        InitializeComponent();
    }

    private void BuildBtn_Click(object sender, EventArgs e)
    {
        CompilerParameters Params = new CompilerParameters();
        Params.GenerateExecutable = true;

        Params.ReferencedAssemblies.Add("System.dll");
        Params.ReferencedAssemblies.Add("System.Drawing.dll");
        Params.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        Params.ReferencedAssemblies.Add("System.Runtime.InteropServices.dll");
      //  Params.ReferencedAssemblies.Add("System.Diagnostics");
        Params.ReferencedAssemblies.Add("System.Threading.dll");
        Params.ReferencedAssemblies.Add("System.IO.dll");
       //Params.ReferencedAssemblies.Add("Microsoft.Win32.dll");
        Params.OutputAssembly = "output.exe";
        Params.CompilerOptions = " /target:winexe";
        string Source = Properties.Resources.LockerSource;
        CompilerResults results = new CSharpCodeProvider().CompileAssemblyFromSource(Params, Source);
        if (results.Errors.Count < 0)
        {
            MessageBox.Show("nice");
        }
        else
        {
            foreach (var error in results.Errors)
            {
                MessageBox.Show(error.ToString());
            }
        }
    }
}

}

And this is the source of the application i want to build Don't pay attention to the referrence assemblies added to the CsharpCodeProvider

using System;
using System.Drawing;
using System.Windows.Forms;



namespace MyApp
{
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                #region AddControls
                //Basic Form Seetings
                this.Text = "AppName";
                this.ControlBox = false;
                this.ShowInTaskbar = false;
                //Add Contidions TextBox
                RichTextBox conditions = new RichTextBox();
                this.Controls.Add(conditions);
                conditions.Width = this.Width;
                conditions.Height = this.Height / 2;
                conditions.BackColor = this.BackColor;
                conditions.BorderStyle = BorderStyle.None;
                conditions.Text =@"Sometext";
                conditions.Font = new Font(conditions.Font.FontFamily, 8, conditions.Font.Style | FontStyle.Bold);
                conditions.Location = new Point(0, 130);
                conditions.Enabled = false;
                this.Width += 15;
                //Add Contidions TextBox
                //Add CodeTextBox
                TextBox codeBox = new TextBox();
                this.Controls.Add(codeBox);
                codeBox.Width = this.Width - 60;
                codeBox.Location = new Point(20, 10);
                codeBox.TextAlign = HorizontalAlignment.Center;
                //Add CodeTextBox
                //Add DownloadButton
                Button DownloadBtn = new Button();
                this.Controls.Add(DownloadBtn);
                DownloadBtn.Location = new Point(19, 35);
                DownloadBtn.Width = 130;
                DownloadBtn.Height = 30;
                DownloadBtn.Text = "Download Code";
                Button SubmitBtn = new Button();
                this.Controls.Add(SubmitBtn);
                SubmitBtn.Location = new Point(this.Width - 169, 35);
                SubmitBtn.Width = 130;
                SubmitBtn.Height = 30;
                SubmitBtn.Text = "Submit";
                Button VerifyEmailBtn = new Button();
                this.Controls.Add(VerifyEmailBtn);
                VerifyEmailBtn.Location = new Point(19, 70);
                VerifyEmailBtn.Width = codeBox.Width + 1;
                VerifyEmailBtn.Height = 30;
                VerifyEmailBtn.Text = "Click here if you need to verify your email";
                //Add DownloadButton
                #endregion
            }


        }
    }

But i get the following error

the type or namespace name "Form" could not be found(are you missing a using directive or an assembly reference)

I understand the error just can't understand what i could be missing.

I hope i get some responses as i am really stuck.

Upvotes: 3

Views: 1973

Answers (1)

Pete
Pete

Reputation: 6723

You need to add a suitable entrypoint for the app.

Look at the Main() function in Program.cs that VS.NET generates as a model.

You also need to remove the InitializeComponent() call.

After those changes, it compiles just fine for me.

This is the code I have (I made your program into a string for my purposes):

using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace formcomp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CompilerParameters Params = new CompilerParameters();
            Params.GenerateExecutable = true;

            Params.ReferencedAssemblies.Add("System.dll");
            Params.ReferencedAssemblies.Add("System.Drawing.dll");
            Params.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            Params.ReferencedAssemblies.Add("System.Runtime.InteropServices.dll");
            Params.ReferencedAssemblies.Add("System.Threading.dll");
            Params.ReferencedAssemblies.Add("System.IO.dll");
            Params.OutputAssembly = "output.exe";
            Params.CompilerOptions = " /target:winexe";
            string Source = GetSource();
            CompilerResults results = new CSharpCodeProvider().CompileAssemblyFromSource(Params, Source);
            if (results.Errors.Count < 0)
            {
                MessageBox.Show("nice");
            }
            else
            {
                foreach (var error in results.Errors)
                {
                    MessageBox.Show(error.ToString());
                }
            }
        }

        private string GetSource()
        {
            string code = "using System; " + Environment.NewLine;
            code += "using System.Drawing;" + Environment.NewLine;
            code += "using System.Windows.Forms;" + Environment.NewLine;
            code += "namespace MyApp" + Environment.NewLine;
            code += "{" + Environment.NewLine;
            code += "public class Program" + Environment.NewLine;
            code += "{" + Environment.NewLine;
            code += "[STAThread]" + Environment.NewLine;
            code += "static void Main()" + Environment.NewLine;
            code += "{" + Environment.NewLine;
            code += "Application.EnableVisualStyles();" + Environment.NewLine;
            code += "Application.SetCompatibleTextRenderingDefault(false);" + Environment.NewLine;
            code += "Application.Run(new Form1());" + Environment.NewLine;
            code += "}" + Environment.NewLine;
            code += "}" + Environment.NewLine;
            code += "        public partial class Form1 : Form" + Environment.NewLine;
            code += "        {" + Environment.NewLine;
            code += "            public Form1()" + Environment.NewLine;
            code += "            {" + Environment.NewLine;
            code += "                #region AddControls" + Environment.NewLine;
            code += "                //Basic Form Seetings" + Environment.NewLine;
            code += "                this.Text = \"AppName\";" + Environment.NewLine;
            code += "                this.ControlBox = false;" + Environment.NewLine;
            code += "                this.ShowInTaskbar = false;" + Environment.NewLine;
            code += "                //Add Contidions TextBox" + Environment.NewLine;
            code += "                RichTextBox conditions = new RichTextBox();" + Environment.NewLine;
            code += "                this.Controls.Add(conditions);" + Environment.NewLine;
            code += "                conditions.Width = this.Width;" + Environment.NewLine;
            code += "                conditions.Height = this.Height / 2;" + Environment.NewLine;
            code += "                conditions.BackColor = this.BackColor;" + Environment.NewLine;
            code += "                conditions.BorderStyle = BorderStyle.None;" + Environment.NewLine;
            code += "                conditions.Text =\"Sometext\";" + Environment.NewLine;
            code += "                conditions.Font = new Font(conditions.Font.FontFamily, 8, conditions.Font.Style | FontStyle.Bold);" + Environment.NewLine;
            code += "                conditions.Location = new Point(0, 130);" + Environment.NewLine;
            code += "                conditions.Enabled = false;" + Environment.NewLine;
            code += "                this.Width += 15;" + Environment.NewLine;
            code += "                //Add Contidions TextBox" + Environment.NewLine;
            code += "                //Add CodeTextBox" + Environment.NewLine;
            code += "                TextBox codeBox = new TextBox();" + Environment.NewLine;
            code += "                this.Controls.Add(codeBox);" + Environment.NewLine;
            code += "                codeBox.Width = this.Width - 60;" + Environment.NewLine;
            code += "                codeBox.Location = new Point(20, 10);" + Environment.NewLine;
            code += "                codeBox.TextAlign = HorizontalAlignment.Center;" + Environment.NewLine;
            code += "                //Add CodeTextBox" + Environment.NewLine;
            code += "                //Add DownloadButton" + Environment.NewLine;
            code += "                Button DownloadBtn = new Button();" + Environment.NewLine;
            code += "                this.Controls.Add(DownloadBtn);" + Environment.NewLine;
            code += "                DownloadBtn.Location = new Point(19, 35);" + Environment.NewLine;
            code += "                DownloadBtn.Width = 130;" + Environment.NewLine;
            code += "                DownloadBtn.Height = 30;" + Environment.NewLine;
            code += "                DownloadBtn.Text = \"Download Code\";" + Environment.NewLine;
            code += "                Button SubmitBtn = new Button();" + Environment.NewLine;
            code += "                this.Controls.Add(SubmitBtn);" + Environment.NewLine;
            code += "                SubmitBtn.Location = new Point(this.Width - 169, 35);" + Environment.NewLine;
            code += "                SubmitBtn.Width = 130;" + Environment.NewLine;
            code += "                SubmitBtn.Height = 30;" + Environment.NewLine;
            code += "                SubmitBtn.Text = \"Submit\";" + Environment.NewLine;
            code += "                Button VerifyEmailBtn = new Button();" + Environment.NewLine;
            code += "                this.Controls.Add(VerifyEmailBtn);" + Environment.NewLine;
            code += "                VerifyEmailBtn.Location = new Point(19, 70);" + Environment.NewLine;
            code += "                VerifyEmailBtn.Width = codeBox.Width + 1;" + Environment.NewLine;
            code += "                VerifyEmailBtn.Height = 30;" + Environment.NewLine;
            code += "                VerifyEmailBtn.Text = \"Click here if you need to verify your email\";" + Environment.NewLine;
            code += "                //Add DownloadButton" + Environment.NewLine;
            code += "                #endregion" + Environment.NewLine;
            code += "            }" + Environment.NewLine;
            code += "        }" + Environment.NewLine;
            code += "    }" + Environment.NewLine;
            return code;
        }
    }
}

Upvotes: 3

Related Questions