.Net Core’da Kod Derleme ve Yürütme(Roslyn) Çalışması

Semih Yücel
3 min readDec 27, 2020

Merhabalar; Harici kod dosyalarını yazdığımız projelerde derleyebilme imkanı sunan CSharpCodeProvider .Net Core ile birlikte yerini Roslyn’ye bırakmaktadır.

Sistem alt yapısında bu kadar ciddi bir değişikliğe microsoft neden gitti bunun bir çok açılaması tabi ki bulunmaktadır. Bu açıklamalara girmeyeceğim(çok fazla makale zaten mevcut) sizleri .Net Fremwork ve .Net Core da code belgelerini nasıl derlersin bunlardan bahsedeceğim.

Klasik olarak .Net Fremwork 4.7.2 ile harici bir kod belgesini nasıl derleriz bir örnek vereceğim.

CSharpCodeProvider ve CompilerParameters sınıflarından bir nesne türetmemiz gerekiyor.

Burada öncelikle CSharpCodeProvider nesnesinden bahsetmek istiyorum. Microsoft.CSharp sınıfından türemektedir ancak bu hala geçerli olmakla beraber Microsoft.CodeDom.Providers.DotNetCompilerPlatform sınıfında da türeyebilmektedir. İkinci seçenek .Net Core 3.0'a kadar da geçerli olduğu kaynaklarda bahsedilmiş ancak herhangi bir geçerliliği artık kalmamıştır.

İkinci olarak derlemek ve çalıştırmak istediğimiz kod belgesinde kullandığımız referansları ReferencedAssemblies ile add etmemiz gerekiyor ki proje içine yazdığımız nesneler sınıflarını bulabilsin.

İhtiyacımız olan dll dosyalarını cp.ReferencedAssemblies.Add ile compiler’ımıza dahil ettik.

tekrar in memori ve compiler option seçeneklerimizi belirtmek istiyorum ve hata olması durumda bunları kullanıcıya gösterim derim.

Son olarak hata olmaması durumda kod belgesindeki SetCS namespace altındaki SetCS clası içindeki metotlardan birisni çalıştırmayı ve sonu return etmeye bakalım.

Yukarıda verdiğim kodların sonuna aşağıdaki kodu eklediğiniz zaman Semih isimli metodun çalıştığı ve sonu s object nesnesine bastığını görebilirsiniz.

Şimdide bunu .Net Core da nasıl yaparız yine kabaca basit bir örnek vereceğim. yine aynı kod belgemizi kullanacak.(kod belgesini en aşağıda paylaşacağım.)

.Net core ile Roslyn hayatımıza girmiş bulunmaktadır. aynı kodları .Net core yazamaz mıyız diyeceksiniz evet yazabilirsiniz. ama kodları run etme kısmına geldiğiniz zaman platform için geçersiz çalıştırma/desteklenmeyen nesne gibi hata alacaksınız

projemize nuget olarak Roslyn ile hazırlanmış Microsoft.CodeAnalysis kütüphanesini eklememiz gerekmektedir.

ek olarak CSharpCompilation clasını incelemenizi tavsiye ediyorum,

burada dahili dll dosyarını MetadataReference.CreateFromFile ile projemize add etmemiz gerekiyor.

kodlarımızı .Net Core da kısaca aşağıdaki gibi

Son olarak taslak olarak kullandığım kod belgemi paylaşıyorum.

Sonuçları DataTable olarak dönen bir cs belgesi

--

--