Bagaimana pemrograman kompilasi kode menggunakan C# Kompilator

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 304655 - Melihat produk di mana artikel ini berlaku.
Untuk Visual Basic.NET versi artikel ini, lihat 304654.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

The.NET Framework kelas yang memungkinkan Anda untuk mengakses pemrograman C# bahasa kompiler mengekspos. Ini mungkin akan berguna jika Anda ingin menulis utilitas kompilasi kode Anda sendiri. Artikel ini menyediakan kode contoh yang memungkinkan Anda untuk mengkompilasi kode sumber teks. Aplikasi memungkinkan Anda untuk baik hanya membangun executable atau membangun executable dan menjalankannya. Setiap kesalahan yang terjadi selama proses kompilasi ditampilkan pada formulir.

INFORMASI LEBIH LANJUT

Langkah 1: persyaratan

  • Visual Studio
  • Visual C# bahasa kompilator

Langkah 2: Bagaimana untuk pemrograman mengkompilasi kode

The.NET Framework menyediakan antarmuka eksekusi kompiler ICodeCompiler. The CSharpCodeProvider kelas mengimplementasikan antarmuka ini dan menyediakan akses ke contoh dari C# kode generator dan kode kompilator. Dalam kode contoh berikut menciptakan contoh CSharpCodeProvider dan menggunakannya untuk mendapatkan referensi ke antarmuka ICodeCompiler.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
				

Setelah Anda memiliki referensi ke antarmuka ICodeCompiler, Anda dapat menggunakannya untuk mengkompilasi kode sumber. Anda akan melewati parameter pada compiler menggunakan CompilerParameters kelas. Berikut adalah contoh:
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
				

Kode di atas menggunakan objek CompilerParameters untuk memberitahu kompiler yang Anda inginkan untuk menghasilkan file eksekusi (sebagai lawan untuk DLL) dan bahwa Anda ingin output Majelis dihasilkan ke disk. Panggilan untuk CompileAssemblyFromSource adalah di mana Majelis akan dikompilasi. Metode ini mengambil parameter objek dan kode sumber, yang merupakan string. Setelah Anda mengkompilasi kode Anda, Anda dapat memeriksa untuk melihat apakah ada kesalahan kompilasi. Anda menggunakan nilai kembali dari CompileAssemblyFromSource, yang merupakan objek CompilerResults. Benda ini berisi kesalahan koleksi, yang berisi setiap kesalahan yang terjadi selama kompilasi.
   if (results.Errors.Count > 0)
   {
    foreach(CompilerError CompErr in results.Errors)
    {
     textBox2.Text = textBox2.Text +
         "Line number " + CompErr.Line + 
         ", Error Number: " + CompErr.ErrorNumber + 
         ", '" + CompErr.ErrorText + ";" + 
         Environment.NewLine + Environment.NewLine;
    }
   }
				

Ada pilihan lain untuk mengkompilasi, seperti kompilasi dari file. Anda juga dapat batch kompilasi, yang berarti Anda dapat menyusun beberapa file atau sumber pada waktu yang sama. Informasi tambahan pada kelas-kelas ini dapat ditemukan di MSDN Online Library:
http://MSDN.Microsoft.com/en-US/default.aspx

Langkah 3: Langkah demi langkah prosedur contoh

  1. Buat baru Visual C#.Aplikasi NET Windows. Form1 dibuat secara default.
  2. Tambahkan Tombol kontrol untuk Form1, dan kemudian mengubah yang Teks properti untuk Bangun.
  3. Menambahkan Tombol kontrol untuk Form1, dan kemudian mengubah yang Teks properti untuk Menjalankan.
  4. Menambahkan dua TextBox kontrol untuk Form1, mengatur Multiline properti untuk kedua kontrol untuk Benar, dan kemudian ukuran kontrol ini sehingga Anda dapat menyisipkan beberapa baris teks ke dalam masing-masing.
  5. Dalam kode editor, buka file sumber Form1.cs.
  6. Dalam Form1 kelas, pasta tombol berikut klik handler.
    private void button1_Click(object sender, System.EventArgs e)
    {
        CSharpCodeProvider codeProvider = new CSharpCodeProvider();
        ICodeCompiler icc = codeProvider.CreateCompiler();
        string Output = "Out.exe";
        Button ButtonObject = (Button)sender;
    
        textBox2.Text = "";
        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        //Make sure we generate an EXE, not a DLL
        parameters.GenerateExecutable = true;
        parameters.OutputAssembly = Output;
        CompilerResults results = icc.CompileAssemblyFromSource(parameters, textBox1.Text);
    
        if (results.Errors.Count > 0)
        {
            textBox2.ForeColor = Color.Red;
            foreach (CompilerError CompErr in results.Errors)
            {
                textBox2.Text = textBox2.Text +
                            "Line number " + CompErr.Line +
                            ", Error Number: " + CompErr.ErrorNumber +
                            ", '" + CompErr.ErrorText + ";" +
                            Environment.NewLine + Environment.NewLine;
            }
        }
        else
        {
            //Successful Compile
            textBox2.ForeColor = Color.Blue;
            textBox2.Text = "Success!";
            //If we clicked run then launch our EXE
            if (ButtonObject.Text == "Run") Process.Start(Output);
        }
    }
    Add the beginning of the file, add these using statements:
    using System.CodeDom.Compiler;
    using System.Diagnostics;
    using Microsoft.CSharp;
    
    Catatan Jika Anda menggunakan Visual Studio 2005 atau Visual Studio 2008 CSharpCodeProvider kelas juga ditinggalkan. Anda dapat menggunakan CodeDomProvider kelas sebaliknya, seperti pelaksanaan button1_Click berikut menunjukkan.
    private void button1_Click(object sender, System.EventArgs e)
    {
        CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
        string Output = "Out.exe";
        Button ButtonObject = (Button)sender;
    
        textBox2.Text = "";
        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        //Make sure we generate an EXE, not a DLL
        parameters.GenerateExecutable = true;
        parameters.OutputAssembly = Output;
        CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, textBox1.Text);
    
        if (results.Errors.Count > 0)
        {
            textBox2.ForeColor = Color.Red;
            foreach (CompilerError CompErr in results.Errors)
            {
                textBox2.Text = textBox2.Text +
                            "Line number " + CompErr.Line +
                            ", Error Number: " + CompErr.ErrorNumber +
                            ", '" + CompErr.ErrorText + ";" +
                            Environment.NewLine + Environment.NewLine;
            }
        }
        else
        {
            //Successful Compile
            textBox2.ForeColor = Color.Blue;
            textBox2.Text = "Success!";
            //If we clicked run then launch our EXE
            if (ButtonObject.Text == "Run") Process.Start(Output);
        }
    }
    Add the beginning of the file, add these using statements:
    using System.CodeDom.Compiler;
    using System.Diagnostics;
    
  7. Di Form1.cs, temukan Form1 constructor.
  8. Setelah panggilan untuk InitializeComponent dalam konstruktor Form1, tambahkan kode berikut untuk kawat tombol klik penangan untuk kedua tombol yang ditambahkan untuk Form1.
    public Form1()
    {
        InitializeComponent();
        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.button2.Click += new System.EventHandler(this.button1_Click);
    }
    
  9. Menjalankan proyek. Setelah Form1 load, klik Bangun tombol. Perhatikan bahwa Anda mendapatkan kesalahan kompilator.
  10. Selanjutnya, Salin teks berikut ke textbox, menggantikan teks yang ada:
    using System;
    
    namespace HelloWorld
    {
    	/// <summary>
    	/// Summary description for Class1.
    	/// </summary>
    	class HelloWorldClass
    	{
    		static void Main(string[] args)
    		{
    			Console.WriteLine("Hello World!");
    			Console.ReadLine();
    		}
    	}
    }
    					
  11. Klik Bangun lagi. Kompilasi harus berhasil.
  12. Klik Menjalankan, dan ini akan mengkompilasi kode dan menjalankan file eksekusi yang dihasilkan. Kompilasi menciptakan file eksekusi yang disebut "Out.exe", yang disimpan dalam folder yang sama sebagai aplikasi yang sedang Anda jalankan.

    CATATAN: Anda dapat memodifikasi kode dalam textbox untuk melihat kesalahan kompilator berbeda. Sebagai contoh, menghapus salah satu semi-colons dan membangun kembali kode.
  13. Terakhir, memodifikasi kode dalam textbox untuk output lain baris teks ke jendela konsol. Klik Menjalankan untuk melihat output.

REFERENSI

CSharpCodeProvider kelas
http://MSDN.Microsoft.com/en-us/library/Microsoft.CSharp.csharpcodeprovider.aspx

ICodeCompiler antarmuka
http://MSDN.Microsoft.com/en-us/library/System.codedom.compiler.icodecompiler.aspx

Properti

ID Artikel: 304655 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft .NET Framework 1.0, ketika digunakan dengan:
    • Microsoft Visual C# .NET 2002 Standard Edition
Kata kunci: 
kbsweptvs2008 kbbcl kbcompiler kbhowto kbprod2web kbmt KB304655 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:304655

Berikan Masukan