vCompilerParameters.ReferencedAssemblies.Add(typeof(Controls.baseControl).Module.FullyQualifiedName)//这样觉得太烂了,有好的方法吗?

解决方案 »

  1.   

    用这个AppDomain.CurrentDomain.GetAssemblies();或者所有的Assembly
      

  2.   

    string file = "System";//Systemy文件的路径
    string path = "System.DLL";//System.DLL文件的路径
    CompilerParameters compilerparams = new CompilerParameters();
    compilerparams.OutputAssembly = path ;
    CompilerResults results = compiler.CompileAssemblyFromFile(compilerparams,file);
      

  3.   

     我对lovefootball兄 答案的理解是:用AppDomain.CurrentDomain.GetAssemblies()返回Controls的Assembly对象。
    正如typeof(Controls.baseControl).Assembly。可是得到这个Assembly以后.我怎么把它添加到引用中去?
      

  4.   

    对于henry兄的回复,是不是把动态编辑的程序输出到硬盘文件里,
    我不知道这里对添加现在模块的引用是怎么处理的 ?不知道大家明白我问的什么吗?我表达能力是不是很差?
      

  5.   

    我的意思是说,
    我在Comp模块里动态编辑一段代码, 它是一个字符串变量,只不过里存的是代码的字符,
    比如说 string code="Controls.baseControl=new Controls.baseControl();";
    就叫它动态代码吧。
    而这动态代码里又使到了baseControl类。这个类在Controls模块里,Controls模块和Comp模块都在同一解决方案里,都是这个解决方案里的项目。
    为了动态代码能运行。就得动态编辑,动态编辑得添加对Controls模块的引用
    我添加引用方法是:
    vCompilerParameters.ReferencedAssemblies.Add(typeof(Controls.baseControl).Module.FullyQualifiedName)//这样觉得太烂了,有好的方法吗?
    因为在运行时,Controls模块已经在内存里,我不想再通过去读硬盘文件,来添加引用。直接对已经存在内存里的Controls模块引用。vCompilerParameters.ReferencedAssemblies.Add(string value)
    这个value只能是文件路径吗?
      

  6.   

                CompilerParameters parameters = new CompilerParameters();
                Assembly ab = Assembly.GetEntryAssembly();
                AssemblyName[] ans = ab.GetReferencedAssemblies();
                foreach (AssemblyName assemblyName in ans)
                {
                    string codeBase = assemblyName.CodeBase;
                    if (string.IsNullOrEmpty(codeBase))
                    {
                        parameters.ReferencedAssemblies.Add(assemblyName.Name + ".dll");
                        continue;
                    }
                    string tempFileName = codeBase.StartsWith("file://") ? codeBase.Substring(8) : codeBase.Substring(codeBase.LastIndexOf("/") + 1);
                    parameters.ReferencedAssemblies.Add(tempFileName);
                }