C# 动态编译

动态编译

动态编译流程:源码代码模板 ==》 编译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:自定义方法自定义方法inLogHelper.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" });
原文地址:https://www.cnblogs.com/tangpeng97/p/13891080.html