优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#中动态编译并执行字符串代码,类似javascript中的eval方法

nanyue 2024-09-15 23:30:16 技术文章 3 ℃

在C#中可以使用CodeDomProvider类的CompileAssemblyFromSource方法来动态执行字符串形式的代码来实现这个目的。

using System;
using System.CodeDom.Compiler;
using System.Reflection;
class Program
{
static void Main()
{
string code = @"
using System;
class DynamicCode
{
public void Execute()
{
Console.WriteLine(""Hello from dynamic code!"");
}
}
";
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
if (results.Errors.HasErrors)
{
foreach (CompilerError error in results.Errors)
{
Console.WriteLine(error.ErrorText);
}
}
else
{
Assembly assembly = results.CompiledAssembly;
dynamic dynamicCode = assembly.CreateInstance("DynamicCode");
dynamicCode.Execute();
}
}
}

这样创建了一个包含动态代码的字符串,并使用CodeDomProvider类的CompileAssemblyFromSource方法来编译并执行它。最后,我们动态创建了一个DynamicCode实例并调用了它的Execute方法,从而实现了类似JavaScript中eval方法的功能。这种方式有个使用场景也是可以执行远程服务器端的代码字符串,有的时候改编服务器的字符串代码,本地程序就可以产生不同的逻辑执行。比如服务器端改变一些加密算法一类的可以非常灵活。

最近发表
标签列表