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 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;
}
}
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
Yeni bir Visual C# .NET Windows uygulaması oluşturun. Form1 varsayılan olarak oluşturulur.
Form1'e bir Düğme denetimi ekleyin ve ardından 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ırabilmeniz 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ğ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); }
Projeyi çalıştırın. Form1 yüklendikten 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ı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.
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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin