Reputation: 457
I wanted to learn about building files with c# so I created a Windows Forms Application and I created this code/form. But It did not seem to work.
.
using System;
using System.Windows.Forms;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
namespace teztie
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.exe |*.exe";
DialogResult result = sfd.ShowDialog();
if (result == DialogResult.OK)
{
build(sfd.FileName, textBox1.Text, textBox2.Text);
}
}
private void build(string output, string msg, string name)
{
CompilerParameters p = new CompilerParameters();
p.GenerateExecutable = true;
p.ReferencedAssemblies.AddRange(new string[] { "System.dll", "System.Windows.Forms.dll"});
p.OutputAssembly = output;
p.CompilerOptions = "/t:winexe";
string source = Properties.Resources.source;
string errors = string.Empty;
source = source.Replace("[MSG]", msg);
source = source.Replace("[NAME]", name);
CompilerResults results = new CSharpCodeProvider().CompileAssemblyFromSource(p, source);
if (results.Errors.Count > 0)
{
foreach (CompilerError err in results.Errors)
{
errors += "Error: " + err.ToString() + "\r\n\r\n";
}
}
else
{
errors = "Successfully built:\n" + output;
}
MessageBox.Show(errors, "Build", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
Source.Txt:
using System;
using System.Windows.Forms;
namespace code
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("[msg]", "[title]" );
}
}
}
But when I click the compile button it gives me an error. The name InitializeComponent does not exist in the current context.
Upvotes: 2
Views: 10070
Reputation: 570
The constructor is calling a method called "InitializeComponent", but that method is not defined in your class. Typically, InitializeComponent is used by the VS designer to hold code needed to apply your selections in the designer at runtime. If you copied this form from an example, either add an empty method called "InitializeComponent" to this class or remove this method call from your constructor.
Upvotes: 3