智能建站系统官网,关键词优化排名首页,免费app制作工具,免费的软件下载安装写在前面
本文采用动态编译的方式#xff0c;对目标文件code.txt中的C#代码进行实时编译并调用#xff1b;当然也可以直接在代码中直接装配或读取已有的代码文本#xff0c;动态编译可以用于很多需要热更新的场景#xff0c;实现无需重启程序也能达到更新代码的需求。
代…写在前面
本文采用动态编译的方式对目标文件code.txt中的C#代码进行实时编译并调用当然也可以直接在代码中直接装配或读取已有的代码文本动态编译可以用于很多需要热更新的场景实现无需重启程序也能达到更新代码的需求。
代码实现 static void Main(string[] args){CSharpCodeProvider objCSharpCodePrivoder new CSharpCodeProvider();ICodeCompiler objICodeCompiler objCSharpCodePrivoder.CreateCompiler();CompilerParameters objCompilerParameters new CompilerParameters();//添加需要引用的dllobjCompilerParameters.ReferencedAssemblies.Add(System.dll);objCompilerParameters.ReferencedAssemblies.Add(System.Data.dll);//是否生成可执行文件objCompilerParameters.GenerateExecutable false;//是否生成在内存中objCompilerParameters.GenerateInMemory true;// 读取代码var code File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, code.txt));//编译代码CompilerResults cr objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, code);if (cr.Errors.HasErrors){var msg string.Join(Environment.NewLine, cr.Errors.CastCompilerError().Select(err err.ErrorText));Console.WriteLine(msg, 编译错误);}else{Assembly objAssembly cr.CompiledAssembly;object objHelloWorld objAssembly.CreateInstance(Test);MethodInfo objMI objHelloWorld.GetType().GetMethod(Hello);objMI.Invoke(objHelloWorld, null);}Console.WriteLine(Ok);Console.ReadLine();}
目标代码code.txt
using System;public class Test
{public void Hello(){Console.WriteLine(Hello rjcql);}
}执行结果