DavidJGu's Blog

       尼采说,宁可追求虚无也不能无所追求!  Keeping is harder than winning
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

也谈C#动态编译

Posted on 2004-11-19 19:47  Let's DotNet  阅读(1485)  评论(1编辑  收藏  举报
最近写了些动态编译的东西。基本上有两种方法:
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);

结论:
第一种方法不太稳定,不知是否没有写完整,会报“无法在设置线程模式后对其加以更改”的错;
第二种方法则比较稳定,结构也比较清晰。
有时间,我会仔细研究一下~