none
CSharpCodeProvider动态编译,系统是如何定位ReferencedAssemblies中的程序集的? RRS feed

  • 问题

  • 动态编译一段代码,程序如下:

    private void btnSave_Click(object sender, RoutedEventArgs e) { //创建CodeProvider对象 CSharpCodeProvider provider = new CSharpCodeProvider(); //给Provider创建参数对象,并给参数赋值 CompilerParameters paras = new CompilerParameters(); paras.ReferencedAssemblies.Add("CommonInterface.dll"); //自己生成的DLL paras.ReferencedAssemblies.Add("PresentationFramework.dll"); //系统的DLL paras.ReferencedAssemblies.Add("System.Core.dll"); //系统的DLL paras.GenerateInMemory = false; paras.OutputAssembly = @"E:\test.dll"; //调用provider方法进行编译 CompilerResults result = provider.CompileAssemblyFromSource(paras, BuildCode());

    …… } //生成代码字符串 priva string BuildCode() { StringBuilder sourceCode = new String (); sourceCode.AppendLine("using System;"); sourceCode.AppendLine("using System.Linq;"); sourceCode.AppendLine("using System.Text;"); sourceCode.AppendLine("using CommonInterface;"); sourceCode.AppendLine("using System.Windows;"); sourceCode.AppendLine(" public dynamic Execute(params dynamic[] parameters) {"); …… return sourceCode.ToString(); }


    执行时,系统提示:



    一开始猜想系统是不是到程序当前路径去找程序集的,于是把一个PresentationFramework.dll文件复制到当前程序路径(E:\MyApp\bin\Debug),果然编译成功,但是仔细一看,该路径下也没有System.Core.dll啊,为什么不提示找不到System.Core.dll?

    系统到底是如何去定位ReferencedAssemblies中的程序集的?

                         

    • 已编辑 seewold 2014年4月25日 11:09
    2014年4月25日 10:48

答案

全部回复