CodeDOM没有编译

时间:2013-01-04 20:59:08

标签: c# codedom

我想为我的应用程序构建一个构建器,这是构建器的源代码

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());
            }
        }
    }
}

}

这是我想要构建的应用程序的源代码 不要注意添加到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
            }


        }
    }

但我收到以下错误

  

找不到类型或命名空间名称“Form”(你错过了吗?   使用指令或程序集引用)

我理解错误只是无法理解我可能遗漏的内容。

我希望得到一些答复,因为我真的被卡住了。

1 个答案:

答案 0 :(得分:2)

您需要为应用添加合适的入口点。

查看VSCS作为模型生成的Program.cs中的Main()函数。

您还需要删除InitializeComponent()调用。

在这些变化之后,它对我来说很好。

这是我的代码(为了我的目的,我把你的程序变成了一个字符串):

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;
        }
    }
}