C# derleyicisi kullanarak program aracılığıyla kod derleme

Bu makalede, C# derleyicisi kullanılarak bir metin kaynağından kod derleme açıklanmaktadır.

Orijinal ürün sürümü: Visual Studio, .NET Framework
Özgün KB numarası: 304655

Özet

Microsoft .NET Framework, C# dil derleyicisine program aracılığıyla erişmenizi sağlayan sınıfları kullanıma sunar. Kendi kod derleme yardımcı programlarınızı yazmak istiyorsanız bu yararlı olabilir. Bu makalede, metin kaynağından kod derlemenizi sağlayan örnek kod sağlanır. Uygulama yalnızca yürütülebilir dosyayı oluşturmanıza veya yürütülebilir dosyayı oluşturup çalıştırmanıza olanak tanır. Derleme işlemi sırasında oluşan hatalar formda görüntülenir.

Gereksinimler

  • Visual Studio
  • Visual C# dil derleyicisi

C# derleyicisi kullanarak kod derleme

.NET Framework derleyici yürütme arabirimini ICodeCompiler sağlar. CSharpCodeProvider sınıfı bu arabirimi uygular ve C# kod oluşturucu ve kod derleyicisi örneklerine erişim sağlar. Aşağıdaki örnek kod bir örneği CSharpCodeProvider oluşturur ve bunu kullanarak bir ICodeCompiler arabirime başvuru alır.

CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();

Bir ICodeCompiler arabirim başvurusuna sahip olduktan sonra, kaynak kodunuzu derlemek için bunu kullanabilirsiniz. sınıfını kullanarak parametreleri derleyiciye CompilerParameters geçireceksiniz. Aşağıda bir örnek verilmiştir:

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);

Yukarıdaki kod, derleyiciye yürütülebilir bir dosya oluşturmak istediğinizi (DLL'nin aksine) ve sonuçta elde edilen derlemeyi diske çıkarmak istediğinizi bildirmek için nesnesini kullanır CompilerParameters . çağrısı CompileAssemblyFromSource , derlemenin derlendiği yerdir. Bu yöntem parameters nesnesini ve bir dize olan kaynak kodunu alır. Kodunuzu derledikten sonra herhangi bir derleme hatası olup olmadığını kontrol edebilirsiniz. nesne olan CompilerResults öğesinden CompileAssemblyFromSourcedönüş değerini kullanırsınız. Bu nesne, derleme sırasında oluşan hataları içeren bir hata koleksiyonu içerir.

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;
    }
}

Bir dosyadan derleme gibi derlemeye yönelik başka seçenekler de vardır. Toplu derleme de yapabilirsiniz; bu da aynı anda birden çok dosya veya kaynak derleyebileceğiniz anlamına gelir.

Adım adım yordam örneği

  1. Yeni bir Visual C# .NET Windows uygulaması oluşturun. Form1 varsayılan olarak oluşturulur.

  2. Form1'e bir Düğme denetimi ekleyin ve ardından Text özelliğini Build olarak değiştirin.

  3. Form1'e başka bir Düğme denetimi ekleyin ve text özelliğini Çalıştır olarak değiştirin.

  4. Form1'e iki TextBox denetimi ekleyin, her iki denetim için de Çok Satırlı özelliğini True olarak ayarlayın ve sonra her birine birden çok metin satırı yapıştırabilmeniz için bu denetimleri boyutlandırın.

  5. Kod düzenleyicisinde Form1.cs kaynak dosyasını açın.

  6. Form1 sınıfında, aşağıdaki düğme tıklama işleyicisini yapıştırın.

    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);
        }
    }
    

    Dosyanın başına şu using deyimleri ekleyin:

    using System.CodeDom.Compiler;
    using System.Diagnostics;
    using Microsoft.CSharp;
    
  7. Form1.cs içinde oluşturucuyu Form1 bulun.

  8. Oluşturucuda çağrısından InitializeComponentForm1 sonra, düğme tıklama işleyicisini Form1'e eklediğiniz her iki düğmeye de bağlamak için aşağıdaki kodu ekleyin.

    public Form1()
    {
        InitializeComponent();
        this.button1.Click += new System.EventHandler(this.button1_Click);
        this.button2.Click += new System.EventHandler(this.button1_Click);
    }
    
  9. Projeyi çalıştırın. Form1 yüklendikten sonra Oluştur düğmesine tıklayın.

    Not

    Derleyici hatası alıyorsunuz.

  10. Ardından, var olan tüm metinleri değiştirerek aşağıdaki metni metin kutusuna kopyalayın:

    using System;
    namespace HelloWorld
    {
        /// <summary>
        /// Summary description for Class1.
        /// </summary>
        class HelloWorldClass
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
                Console.ReadLine();
            }
        }
    }
    
  11. Yeniden Oluştur'a tıklayın. Derleme başarılı olmalıdır.

  12. Çalıştır'a tıklatır ve kodu derler ve sonuçta elde edilen yürütülebilir dosyayı çalıştırır. Derleme, çalıştırdığınız uygulamayla aynı klasöre kaydedilen Out.exeadlı bir yürütülebilir dosya oluşturur.

    Not

    Farklı derleyici hataları görmek için metin kutusundaki kodu değiştirebilirsiniz. Örneğin, noktalı virgüllerden birini silin ve kodu yeniden oluşturun.

  13. Son olarak, konsol penceresine başka bir metin satırı çıkarmak için metin kutusundaki kodu değiştirin. Çıkışı görmek için Çalıştır'a tıklayın.

Başvurular