2013-01-04 82 views
2

我想建立我的應用程序生成器,這是建設者的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()); 
      } 
     } 
    } 
} 

} 

的來源,這是我想建立 不注重referrence組件的應用程序的源加入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 [email protected]"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 
      } 


     } 
    } 

,但我得到以下錯誤

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

我明白錯誤就是不明白我可能會錯過什麼。

我希望我得到一些迴應,因爲我真的卡住了。

+1

你編譯沒有出現具有的InitializeComponent()的代碼;你可能會試着把它拉出來。 – Pete

+0

如果我刪除initializeComponent()我得到了一大堆其他錯誤 –

+0

那麼我需要添加什麼其他代碼,是啊可能是一個菜鳥錯誤,請指出:) –

回答

2

您需要爲應用程序添加合適的入口點。

看看VS.NET生成的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; 
     } 
    } 
} 
+0

爲什麼這會得到downvoted?我只是使用這段代碼編譯並運行表單(添加一個AppDomain.CreateDomain(「Test」).executeAssembly(「output.exe」);這怎麼回答海報的問題? – Pete

+0

對不起; p誤讀 – leppie

+0

它確實在編譯,非常感謝 –