C# derleyicisi kullanarak program aracılığıyla kod derleme
Bu makalede, C# derleyicisi kullanılarak bir metin kaynağından kod derleme açıklanmaktadır.
Özgün ürün sürümü: Visual Studio, .NET Framework
Özgün KB numarası: 304655
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, bir 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.
- Visual Studio
- Visual C# dil derleyicisi
.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. Örnek aşağıda 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 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. nesnesi olan CompilerResults
öğesinden CompileAssemblyFromSource
dö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;
}
}
Derleme için dosyadan derleme gibi 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.
Yeni bir Visual C# .NET Windows uygulaması oluşturun. Form1 varsayılan olarak oluşturulur.
Form1'e bir Düğme denetimi ekleyin ve text özelliğini Build olarak değiştirin.
Form1'e başka bir Düğme denetimi ekleyin ve text özelliğini Çalıştır olarak değiştirin.
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ırabilmek için bu denetimleri boyutlandırın.
Kod düzenleyicisinde Form1.cs kaynak dosyasını açın.
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;
Form1.cs içinde oluşturucuyu
Form1
bulun.Oluşturucuda çağrısından
InitializeComponent
Form1
sonra, düğme tıklama işleyicisini Form1'e eklediğiniz her iki düğmeye de bağlayabilmek 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); }
Projeyi çalıştırma. Form1 yükledikten sonra Oluştur düğmesine tıklayın.
Not
Derleyici hatası alıyorsunuz.
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(); } } }
Yeniden Oluştur'a tıklayın. Derleme başarılı olmalıdır.
Çalıştır'a tıklar 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.exe adlı yürütülebilir bir dosya oluşturur.
Not
Farklı derleyici hatalarını görmek için metin kutusundaki kodu değiştirebilirsiniz. Örneğin, noktalı virgüllerden birini silin ve kodu yeniden oluşturun.
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.