如何在Win界面上完成C#編譯
作者:佚名
本文向您介紹如何在Win界面上完成C#編譯,通過建立一個(gè)CSharpCodeProvider并提供CompilerParameters等參數(shù)可以輕松實(shí)現(xiàn)。
本文只是可以讓大家擺脫csc的約束,在Win界面上完成C#編譯編譯.
在C#編譯過程中你必須以下面的步驟完成:
1.建立一個(gè)CSharpCodeProvider 實(shí)例(如果是使用Visual Basic則使用VBCodeProvider)
2.包含接口ICodeCompiler
3.提供CompilerParameters的參數(shù)
4.使用CompileAssemblyFromSource方法編譯。
5.運(yùn)行CompilerResults
6.執(zhí)行C#編譯好的程序
編譯的代碼可以是寫在文本框中的字符串,當(dāng)然也可以源文件。
- 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
- }
- }
【編輯推薦】
責(zé)任編輯:冰荷
來源:
it55