动态编译
动态编译流程:源码代码模板 ==》 编译DLL ==》 反射调用
using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
一、设置源码代码模板
string code = @"
using System;
class HelloWord
{
public void Hello(string name)
{
Console.WriteLine(""Hello "" + name);
}
}";
二、编译DLL
// Compiler and CompilerParameters
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters compParameters = new CompilerParameters();
//compParameters.ReferencedAssemblies.Add("System.dll"); //引入第三方dll
//compParameters.ReferencedAssemblies.Add(@"D:\自定义方法\自定义方法\bin\LogHelper.dll");//引入自定义dll
//compParameters.GenerateInMemory = false;//是否内存中生成输出
//compParameters.GenerateExecutable = false;//是否生成可执行文件
//compParameters.OutputAssembly = "<Dll's path>";//设置Dll路径地址
// Compile the code
CompilerResults result = codeProvider.CompileAssemblyFromSource(compParameters, code);
三、反射调用
//1.Load dll
Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "/Demo.dll");
object myClass1 = assembly.CreateInstance("HelloWord");
myClass1.GetType().GetMethod("Hello").Invoke(myClass1, new object[] { "Jack" });
//2.Load CompilerResults
object myClass = result.CompiledAssembly.CreateInstance("HelloWord");
myClass1.GetType().GetMethod("Hello").Invoke(myClass1, new object[] { "Jack" });