C#将字符串编译成程序集并执行
实现将字符串编译为代码并在程序中使用,实际应用可将字符串保存在文件中,程序启动后读取文件中字符转换为代码执行,这样只需要修改文件不改动代码就可以增删或修改程序功能,提高程序的灵活性。
例如,要实现下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | using System; namespace TestSpace { class Test { public void outPut( string value) { Console.WriteLine( "RCV:" + value); Console.WriteLine(DateTime.Now.ToString()); } } } |
首先添加引用:
1 2 3 4 | using System; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection; |
将上面的代码写成字符串:
1 2 3 4 5 6 7 | string codeStr = "using System;" ; codeStr += "namespace TestSpace{" ; codeStr += "class Test{" ; codeStr += "public void outPut(string value){" ; codeStr += "Console.WriteLine(\"RCV:\"+value);" ; codeStr += "Console.WriteLine(DateTime.Now.ToString());" ; codeStr += "}}}" ; |
下面是代码实现:
1 2 3 4 5 6 7 8 9 10 11 | CSharpCodeProvider cs = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters(); cp.GenerateInMemory = true ; cp.GenerateExecutable = false ; cp.ReferencedAssemblies.Add( "System.dll" ); CompilerResults cr = cs.CompileAssemblyFromSource(cp, codeStr); //返回字符串的编译结果 Assembly ass = cr.CompiledAssembly; //获取编译的程序集 object obj = ass.CreateInstance( "TestSpace.Test" ); //创建程序集中TestSpace命名空间下Test类的实例 MethodInfo mi = obj.GetType().GetMethod( "outPut" ); //使用反射获得该实例的outPut方法 mi.Invoke(obj, new object [] { "12345" }); //执行实例的outPut方法,并传入参数 Console.ReadLine(); |
执行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)