Categories: .NET

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();
Gökhan Gökalp

View Comments

Recent Posts

Containerized Uygulamaların Supply Chain’ini Güvence Altına Alarak Güvenlik Risklerini Azaltma (Güvenlik Taraması, SBOM’lar, Artifact’lerin İmzalanması ve Doğrulanması) – Bölüm 1

{:tr}Bildiğimiz gibi modern yazılım geliştirme ortamında containerization'ın benimsenmesi, uygulamaların oluşturulma ve dağıtılma şekillerini oldukça değiştirdi.…

8 ay ago

Identity & Access Management İşlemlerini Azure AD B2C ile .NET Ortamında Gerçekleştirmek

{:tr}Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı…

12 ay ago

Azure Service Bus Kullanarak Microservice’lerde Event’ler Nasıl Sıralanır (FIFO Consumers)

{:tr}Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente…

2 yıl ago

.NET Microservice’lerinde Outbox Pattern’ı ile Eventual Consistency için Atomicity Sağlama

{:tr}Bildiğimiz gibi microservice architecture'ına adapte olmanın bir çok artı noktası olduğu gibi, maalesef getirdiği bazı…

2 yıl ago

Dapr ve .NET Kullanarak Minimum Efor ile Microservice’ler Geliştirmek – 02 (Azure Container Apps)

{:tr}Bir önceki makale serisinde Dapr projesinden ve faydalarından bahsedip, local ortamda self-hosted mode olarak .NET…

2 yıl ago