Tạo một trình biên dịch C# đơn giản bằng C# – C# simple complier

images

Việc tạo ra một trình biên dịch vốn dĩ rất khó khăn. Nhưng với C# bạn có thể tạo ra một trình biên dịch nhỏ để biên dịch các đoạn mã ngắn viết bằng C#. Điều này nghe có vẻ buồn cười Winking smile, nhưng thực sự việc thực hiện này khá đơn giản, .NET đã cung cấp cho chúng ta những công cụ cần thiết để tạo ra nó. Bây giờ thực hiện thôi.

1. Giới thiệu

Ứng dụng mà chúng ta sắp tạo ra là một ứng dụng cực kỳ đơn giản viết bằng mã nguồn C#. Ứng dụng này có khả năng biên dịch những đoạn mã C# đơn giản. Và những gì chúng ta cần có để có một trình biên dịch C# đơn giản là:

  • Tạo một CSharpCodeProvider ( VBCodeProvidercho Visual Basic).
  • Giao diện cho ICodeCompiler.
  • Biên dịch mã nguồn bằng cách sử dụng phương thức CompileAssemblyFromSource của giao diện ICodeCompiler.
  • Tiến trình CompilerResults.
  • Thực thi ứng dụng nếu không có lỗi khi biên dịch.

2. Code chương trình

–  Chương trình được xây dựng tương đối đơn giản: Chỉ gồm 3 TextBox (1 TextBox chứa nội dung code – txtSourceCode, 1 TextBox chứ tên của ứng dụng tạo ra – txtAppName, 1 TextBox chứ tên class chính – txtMainClass), 1 checkBox để xác định có kiểm tra thông tin Debug hay không. Và một Button – btnComplier để biên dịch code của chương trình.

–  Phải sử dụng các khải báo using dưới đây:

using System.Diagnostics;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;

–  Dưới đây là đoạn code của chính của chương trình được viết trong sự kiện button Complier and Execute được click.

private void btnComplier_Click(object sender, EventArgs e)
{
    CSharpCodeProvider codeProvider = new CSharpCodeProvider();
    //Microsoft.VisualBasic.VBCodeProvider ICodeCompiler compiler = codeProvider.CreateCompiler();
    CompilerParameters parameters = new CompilerParameters();

    parameters.GenerateExecutable = true;
    if (txtAppName.Text == "")
    {
        System.Windows.Forms.MessageBox.Show(this, "Tên ứng dụng không thể rỗn");
        return;
    }

    parameters.OutputAssembly = txtAppName.Text.ToString();

    if (txtMainClass.Text == "")
    {
        System.Windows.Forms.MessageBox.Show(this, "Tên class chính không thể rỗn.");
        return;
    }

    parameters.MainClass = txtMainClass.Text;
    parameters.IncludeDebugInformation = cbxDebugInfo.Checked;           

    foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
    {
        parameters.ReferencedAssemblies.Add(asm.Location);
    }

    String code = txtSourceCode.Text.ToString();           

    CompilerResults results = compiler.CompileAssemblyFromSource(parameters, code);

    if (results.Errors.Count > 0)
    {
        string errors = "Biên dịch lỗi: \n";
        foreach (CompilerError err in results.Errors)
        {
            errors += err.ToString() + "\n";
        }
        System.Windows.Forms.MessageBox.Show(this, errors, "Lỗi không thể biên dịch chương trình");
    }
    else {     

        try {
            if (!System.IO.File.Exists(txtAppName.Text.ToString()))
            {
                MessageBox.Show(String.Format("Không thể tìm thấy {0}", txtAppName),
                    "Chương trình không thể thực thi.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            ProcessStartInfo pInfo = new ProcessStartInfo(txtAppName.Text.ToString());
            Process.Start(pInfo);
        }
        catch (Exception ex)
        {
            MessageBox.Show(String.Format("Lỗi khi thực thi {0}", txtAppName) + ex.ToString(),
                    "Không thể thực thi.", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }           

    }
}

3.  Giao diện và source code chương trình:

–  Giao diện chính của chương trình sẽ như hình bên dưới.

image

–  Khi click vào button Complier and Execute đoạn chương trình như hình trên thì chương trình sẽ chạy ra kết quả như sau:

image

–  Click vào đây để download source code chương trình simple complier C# viết trên Visual studio 2010 (C#)

–  Chúc thành công!

(Tham khảo codeproject.com)

Advertisements

About thanhcuong1990

Handsome and talent!! ^^
This entry was posted in C#. Bookmark the permalink.

2 Responses to Tạo một trình biên dịch C# đơn giản bằng C# – C# simple complier

  1. luong says:

    thanks, dang cần cái này làm đồ án
    thank cái nữa

  2. Pinocchio says:

    Em thử biên dịch 1 chương trình gọi chương trình khác thì nó luôn hiện kèm theo 1 màng hình console 🙂 làm sao hết hiện tượng này

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s