Skip to content

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 “DateTime.Now()” şeklinde string olarak gelen bir değeri vb. runtime esnasında derleyip çıktısını elde etmem gerekti.

Örneği aşağıda bakabilir, ihtiyacınıza göre sizde bu tarz bir konu ile karşılaşırsanız geliştirebilirsiniz. 🙂

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();
Published in.NET

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.