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();
{:tr} Makalenin ilk bölümünde, Software Supply Chain güvenliğinin öneminden ve containerized uygulamaların güvenlik risklerini azaltabilmek…
{: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.…
{:tr}Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı…
{:tr}Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente…
{:tr}Bildiğimiz gibi microservice architecture'ına adapte olmanın bir çok artı noktası olduğu gibi, maalesef getirdiği bazı…
{:tr}Bir önceki makale serisinde Dapr projesinden ve faydalarından bahsedip, local ortamda self-hosted mode olarak .NET…
View Comments
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 :)