//缺憾:装载以后不能卸载,所以第二次生成的时候,不能替换 dll。结果Dll 还是旧的。
不再有缺憾,可以使用影像复制功能来替换DLL
string dllPath = @"d:/DynamicClass.dll";
string csPath = @"d:/DynamicClass.cs";
//保存文件
string Code = string.Format(@"
using System;
using System.Text;
public class DynamicClass
{{
public string speak()
{{
{0}
}}
}}", txtCode.Text);
;
File.WriteAllText(csPath, Code);
//編譯
string path = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory();
string exeInfo = string.Format(@"{0}/csc.exe", path);
string argumentsInfo = string.Format(" /t:library /out:{0} {1}", dllPath, csPath);
Process p = new Process();
p.StartInfo.FileName = exeInfo;
p.StartInfo.Arguments = argumentsInfo;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
//調用
Assembly ass = Assembly.LoadFile(dllPath);
Type t1 = ass.GetType("DynamicClass");
MethodInfo minfo = t1.GetMethod("speak");
Object obj = Activator.CreateInstance(t1);
Object o1 = minfo.Invoke(obj, null);
txtResult.Text = o1.ToString();