.NET Uygulamalarının Çalışma Yapısı: Derleme ve Çalıştırma Süreçleri

Dotnet uygulamalarının çalışma yapısı, gerçekleşecek olan derleme ve çalıştırma süreçleri Language Specific Compiler, Intermediate Language, Common Language Runtime, Just-In-Time Compiler ve Native Code kavramları ile birlikte ele alınacaktır.

Compilation (Derleme Aşaması)

Language Specific Compiler, yani dile özgü derleyiciler bulunmaktadır. C# dilini kullanarak bir uygulama geliştirdiğimizi varsayalım. Yazmış olduğumuz uygulamayı build ettiğimizde Language Specific Compiler, yazmış olduğumuz uygulamayı bir ara dile çevirir. Bu ara dil, Microsoft Intermediate Language, Common Intermediate Language veya Intermediate Language olarak bilinmektedir. Ara dile çevrilmesi ile birlikte oluşacak olan dosyalar .EXE veya .DLL uzantılı dosyalar olacaktır.

Runtime (Çalışma Zamanı) Aşaması

Uygulamayı çalıştırdım. Uygulama çalıştırıldığı anda Common Language Runtime devreye girmektedir. Common Language Runtime’ın devreye girmesi ile birlikte Just-In-Time Compiler oluşan ilgili Microsoft Intermediate Language kodunu, Native code‘a dönüştürmektedir. Native code, makine koduna karşılık gelmektedir. Yani işletim sistemimize özgü olarak, işletim sistemimizde ilgili uygulamanın çalışabilmesi için oluşturalan koddan bahsediyoruz. Native code’a dönüştürülme işleminden sonra uygulama başarılı bir şekilde çalıştırılır.

Örnek: Basit Bir Console Uygulaması

Konunun daha iyi anlaşılması için basit bir örnek yapalım.

Yeni Bir Console Uygulaması Oluşturma

SampleApp adında bir Console uygulaması oluşturalım.
$ dotnet new console -o .

Proje dizinimiz şu şekilde oluşacaktır.

Uygulamayı Derleme

Projemizi build edelim. Build etme aşamasında Language Specific Compiler, yazılmış olan ilgili kodu Microsoft Intermediate Language koduna çevirir. Bu dosyalar daha önce belirtildiği gibi .EXE veya .DLL uzantılı dosyalar olmaktadır.

$ dotnet build

Build etme işlemi sonlandığında proje dizininde bin adlı bir dizin oluştuğunu gözlemleyeceğiz.

İlgili .EXE uzantılı dosyamızın da ilgili dizin altında oluştuğunu gözlemliyoruz.

Uygulamayı Çalıştırma

Şimdi uygulamamızı çalıştıralım. Aşağıdaki komutu verdiğimiz anda Common Language Runtime devreye girer. Just-In-Time Compiler, ilgili Microsoft Intermediate Language kodunu native koda yani yerel koda dönüştürür. Bu da işletim sistemimize özgü oluşturulmuş olan bir makine kodudur. Native kod da oluşturulduktan sonra artık uygulama başarılı bir şekilde çalıştırılmaktadır.

$ dotnet run