İçeriğe geç

C# runtime ortamında kod derleme

Bazen runtime esnasında bir kodu derleyip çıktısını elde etmek isteyebiliriz, en azından benim başıma geldi. 🙂 Bir projemde bana string olarak gelen bir değeri, örneğin “DateTime.Now()”, runtime esnasında derleyip çıktısını elde etmem gerekti.

Nasıl yapabileceğimize dair örneğe aşağıda bakabilir, ihtiyacınıza göre düzenleyebilirsiniz.

Selametle…

            // Compile edeceğimiz örnek kodumuz.
            string code = @"
                            using System;
            
                            namespace CompileCore
                            {                
                                public class CompileHelper
                                {                
                                    public static string CompileDateTime()
                                    {
                                        return DateTime.Now.ToString(""dd.MM.yyyy HH:mm:ss"");
                                    }
                                }
                            }
                        ";

            CSharpCodeProvider provider = new CSharpCodeProvider();

            // System.CodeDom.Compiler namespace'inin altında bulunmaktadır.
            CompilerResults results = provider.CompileAssemblyFromSource(new CompilerParameters(), code);

            Type binaryFunction = results.CompiledAssembly.GetType("CompileCore.CompileHelper");

            // Gerisi bir ufak reflection kodu ile ilglil metotu alıp delegate aracılığı ile çağırıyoruz.
            var mInfo = binaryFunction.GetMethod("CompileDateTime");

            var funcDelegate = (Func<string>)Delegate.CreateDelegate(typeof(Func<string>), mInfo);

            return funcDelegate();
Kategori:.NET

2 Yorum

  1. Hocam selamlar, net 7 için güncelleme vakti gelmiş kodu bence 🙂

    • Oh sanırım evet, üzerinden koca bir 7 yıl geçmiş. Teknoloji durmuyor yerinde maalesef 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.