本文只是可以让大家摆脱csc的约束,在Win界面上完成C#编译编译.
在C#编译过程中你必须以下面的步骤完成:
1.建立一个CSharpCodeProvider 实例(如果是使用Visual Basic则使用VBCodeProvider)
2.包含接口ICodeCompiler
3.提供CompilerParameters的参数
4.使用CompileAssemblyFromSource方法编译。
5.运行CompilerResults
6.执行C#编译好的程序
编译的代码可以是写在文本框中的字符串,当然也可以源文件。
- private void button1_Click(object
- sender, System.EventArgs e)
- {
- CSharpCodeProvider codeProvider =
- new CSharpCodeProvider();
- // For Visual Basic Compiler try this :
- //Microsoft.VisualBasic.VBCodeProvider
- ICodeCompiler compiler =
- codeProvider.CreateCompiler();
- CompilerParameters parameters =
- new CompilerParameters();
- parameters.GenerateExecutable = true;
- if (appName.Text == "")
- {
- System.Windows.Forms.MessageBox.Show(this,
- "Application name cannot be empty");
- return ;
- }
- parameters.OutputAssembly = appName.
- Text.ToString();
- if (mainClass.Text.ToString() == "")
- {
- System.Windows.Forms.MessageBox.Show(this,
- "Main Class Name cannot be empty");
- return ;
- }
- parameters.MainClass =
- mainClass.Text.ToString();
- parameters.IncludeDebugInformation =
- includeDebug.Checked;
- // Add available assemblies - this
- should be enough for the simplest
- // applications.
- foreach (Assembly asm in AppDomain.
- CurrentDomain.GetAssemblies())
- {
- parameters.ReferencedAssemblies.
- Add(asm.Location);
- }
- String code = textBox1.Text.ToString();
- //System.Windows.Forms.MessageBox.
- Show(this, code);
- CompilerResults results =
- compiler.CompileAssemblyFromSource
- (parameters, code);
- if (results.Errors.Count > 0)
- {
- string errors = "Compilation failed:\n";
- foreach (CompilerError err
- in results.Errors)
- {
- errors += err.ToString() + "\n";
- }
- System.Windows.Forms.MessageBox.
- Show(this, errors,
- "There were compilation errors");
- }
- else
- {
- #region Executing generated executable
- // try to execute application
- try
- {
- if (!System.IO.File.Exists(appName.
- Text.ToString()))
- {
- MessageBox.Show(String.Format("Can't
- find {0}", appName),
- "Can't execute.", MessageBoxButtons.OK,
- MessageBoxIcon.Error);
- return;
- }
- ProcessStartInfo pInfo =
- new ProcessStartInfo(appName.Text.ToString());
- Process.Start(pInfo);
- } it55.com
- catch (Exception ex)
- {
- MessageBox.Show(String.Format(
- "Error while executing {0}",
- appName) + ex.ToString(),
- "Can't execute.",
- MessageBoxButtons.OK,
- MessageBoxIcon.Error);
- }
- #endregion
- }
- }
【编辑推荐】