最近写了些动态编译的东西。基本上有两种方法:
1.只利用using Microsoft.CSharp;
CompilerError[] ce= Compiler.Compile(strArrSourceCode,strArrFileName,strOutputFile,import, configs);
strArrSourceCode:源程序;
strArrFileName:物理文件名,与strArrSourceCode一一对应;
strOutputFile:目标文件;
import:引用程序集;
configs:配置输出文件类型及其他项(有些复杂~)。
2.利用using Microsoft.CSharp;using System.CodeDom;using System.CodeDom.Compiler;
1.只利用using Microsoft.CSharp;
CompilerError[] ce= Compiler.Compile(strArrSourceCode,strArrFileName,strOutputFile,import, configs);
strArrSourceCode:源程序;
strArrFileName:物理文件名,与strArrSourceCode一一对应;
strOutputFile:目标文件;
import:引用程序集;
configs:配置输出文件类型及其他项(有些复杂~)。
2.利用using Microsoft.CSharp;using System.CodeDom;using System.CodeDom.Compiler;
ICodeCompiler comp = new CSharpCodeProvider().CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("system.data.dll");
cp.ReferencedAssemblies.Add("system.xml.dll");
cp.ReferencedAssemblies.Add("system.windows.forms.dll");
......
cp.OutputAssembly = strOutputFile;
CompilerResults cr = comp.CompileAssemblyFromSource(cp,strSourceCode);
结论:
第一种方法不太稳定,不知是否没有写完整,会报“无法在设置线程模式后对其加以更改”的错;
第二种方法则比较稳定,结构也比较清晰。
有时间,我会仔细研究一下~
浙公网安备 33010602011771号