Makale numarası: 304655 - Son Gözden Geçirme: 30 Temmuz 2008 Çarşamba - Gözden geçirme: 3.1

Kod derleyici C# kullanarak program aracılığıyla derlemeye nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Bu makalede, Visual Basic .NET sürümü için bkz: 304654  (http://support.microsoft.com/kb/304654/ ) .

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

.NET Framework sınıflarda programsal olarak C# Dil Derleyici erişmenize olanak sağlar. Bu, kendi Kod derleniyor yardımcı programları yazmak istediğiniz durumlarda yararlı olabilir. Bu makalede, bir <a0>metin</a0> kaynaktan kodunu derlemek sağlayan örnek kodu sağlanır. Uygulama ya da yalnızca yürütülebilir dosyayı veya yürütülebilir dosyayı oluşturmak ve onu sağlar. Derleme işlemi sırasında oluşan hataları, formda görüntülenir.

Daha fazla bilgi

1. Adım: gereksinimleri

  • Visual Studio
  • Visual C# Dil Derleyici

2. Adım: Nasıl programsal olarak kodu derle

.NET Framework ICodeCompiler derleyici yürütme arabirimi sağlar. CSharpCodeProvider sınıfı, bu arabirimi uygulayan ve C# kod üreticisi ve kod derleyici erişim sağlar. Aşağıdaki örnek kod, CSharpCodeProvider bir kopyas?n? olu?turur ve ICodeCompiler bir arabirime başvuru almak için kullanır.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
				

Bir başvuru ICodeCompiler arabirim sonra kaynak kodunu derlemek için kullanabilirsiniz. CompilerParameters sınıf'ı kullanarak, derleyici için parametreleri geçirir. Işte bir örnek:
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
				

Yukarıdaki kod CompilerParameters nesne derleyici yürütülebilir bir dosya (karşıt olarak bir DLL) oluşturmak istediğiniz disk ortaya çıkan bir derlemeye çıkış istediğiniz ve söylemek için kullanır. Derleme derlenmiş CompileAssemblyFromSource yapılan çağrı olur. Bu yöntem parametreleri nesnesi ve kaynak kodu, bir dize alır. Kod derleme sonra herhangi bir derleme hatalarıyla karşılaşıldığını denetleyebilirsiniz. Kullandığınız CompilerResults nesnesi olan CompileAssemblyFromSource, gelen bir dönüş değeri. Bu nesne sırasında derleme 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;
    }
   }
				

Derleme, bir dosyadan derleme gibi diğer seçenekleri de vardır. Ayrıca, başka bir deyişle aynı anda birden fazla dosya veya kaynakları derleyebilirsiniz derleme toplu. Bu sınıflar hakkında ek bilgi MSDN Çevrimiçi Kitaplığı'nda bulunabilir:
http://msdn.microsoft.com/en-us/default.aspx (http://msdn.microsoft.com/en-us/default.aspx)

3. Adım: Ayrıntılı yordam örneği

  1. Yeni bir Visual C# .NET Windows uygulaması oluşturun. Varsayılan olarak, Form1 oluşturulur.
  2. Form1'e bir Düğme denetimi ekleyin ve YapıText özelliğini değiştirin.
  3. Başka bir Düğme denetimi Form1'e ekleyin ve sonra ÇalıştırText özelliğini değiştirin.
  4. Form1'e iki TextBox ekleyin, her iki denetim için Multiline özelliğinintrue için ayarlayın ve sonra bu denetimlerin her birini birkaç satırlık metin yapıştırabilirsiniz şekilde boyutlandırmak.
  5. Kod düzenleyicisinde Form1.cs kaynak dosyayı açın.
  6. Işleyici Form1 sınıfta, <a1>Yapıştır</a1> aşağıdaki düğmeyi tıklatı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);
        }
    }
    Add the beginning of the file, add these using statements:
    using System.CodeDom.Compiler;
    using System.Diagnostics;
    using Microsoft.CSharp;
    
    CSharpCodeProvider sınıfı kalmıştır Visual Studio 2005 veya Visual Studio 2008 kullanıyorsanız, Not. Bunun yerine, aşağıdaki button1_Click uygulaması gösterir gibi CodeDomProvider sınıfı kullanabilirsiniz.
    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. Form1.cs, Form1 kurucusunu bulun.
  8. Form1 kurucusunda ınitializecomponent çağrısı ekledikten sonra düğmeyi kablo aşağıdaki kodu işleyiciye Form1'e eklenen her iki düğmeleri tıklatın.
    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 düğmesini tıklatın. Aldığınız bir derleyici hata dikkat edin.
  10. Daha da herhangi bir varolan metnin yerine metin kutusu, aşağıdaki metni 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. Oluşturma, yeniden tıklatın. Derleme başarılı olması gerekir.
  12. Çalıştır ' ı tıklatın ve kodunu derlemek ve elde edilen yürütülebilir dosyayı çalıştırmak. Derleme, çalıştırmakta olduğunuz uygulama aynı klasöre kaydedilir "Out.exe" adlı bir yürütülebilir dosya oluşturur.

    Not: Farklı bir derleyici hatalarını görmek için metin kutusunu kodu değiştirebilirsiniz. Örneğin, noktalı birini silin ve kodun yeniden.
  13. Son olarak, metin, metin konsol penceresi için bir satır çıkış kodu değiştirebilirsiniz. Çıktı görmek için Çalıştır ' ı tıklatın.

Referanslar

CSharpCodeProvider sınıfı
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx (http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx)

ICodeCompiler arabirimi
http://msdn.microsoft.com/en-us/library/system.codedom.compiler.icodecompiler.aspx (http://msdn.microsoft.com/en-us/library/system.codedom.compiler.icodecompiler.aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft .NET Framework 1.0, Ne zaman ne ile kullanilir:
    • Microsoft Visual C# .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbsweptvs2008 kbbcl kbcompiler kbhowto kbprod2web KB304655 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:304655  (http://support.microsoft.com/kb/304655/en-us/ )