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();
Hocam selamlar, net 7 için güncelleme vakti gelmiş kodu bence 🙂