c#动态编时,如何添加现有模块的引用

问题描述

c#动态编时,如何添加现有模块的程序集的引用.如:一个解决方案下有两个模块:Controls和Comp(这里就是说有两个不同的程序集,在Comp里要用Controls里的类时,必须添一个Controls项目的引用)Controls模块有一个类baseControl在Comp模块下有,CompilerParametersvCompilerParameters=newCompilerParameters();vCompilerParameters.GenerateExecutable=false;vCompilerParameters.GenerateInMemory=true;vCompilerParameters.ReferencedAssemblies.Add("System.DLL");//添加一个dll引用vCompilerParameters.ReferencedAssemblies.Add("mscorlib.dll");//添加一个dll引用vCompilerParameters.ReferencedAssemblies.Add(typeof(Controls.baseControl).Module.FullyQualifiedName)//这里也是添加对一个dll或者exe的引用,是从硬盘文件读取的.能不从硬盘文件去获取这程序集吗?请问有更好的方法吗?//这里用到Controls里的类[email protected]"......Controls.baseControlbc=newControls.baseControl();..."CompilerResultsvCompilerResults=CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(vCompilerParameters,vSource);AssemblyvAssembly=vCompilerResults.CompiledAssembly;........

解决方案

解决方案二:
能不能不去引用的是硬盘文件?各位高手给个回复呀,谢谢!
解决方案三:
up!
解决方案四:
vCompilerParameters.ReferencedAssemblies.Add(typeof(Controls.baseControl).Module.FullyQualifiedName)//这样觉得太烂了,有好的方法吗?
解决方案五:
up!
解决方案六:
用这个AppDomain.CurrentDomain.GetAssemblies();或者所有的Assembly
解决方案七:
stringfile="System";//Systemy文件的路径stringpath="System.DLL";//System.DLL文件的路径CompilerParameterscompilerparams=newCompilerParameters();compilerparams.OutputAssembly=path;CompilerResultsresults=compiler.CompileAssemblyFromFile(compilerparams,file);
解决方案八:
up
解决方案九:
我对lovefootball兄 答案的理解是:用AppDomain.CurrentDomain.GetAssemblies()返回Controls的Assembly对象。正如typeof(Controls.baseControl).Assembly。可是得到这个Assembly以后.我怎么把它添加到引用中去?
解决方案十:
引用6楼wenrenhua08的回复:

stringfile="System";//Systemy文件的路径stringpath="System.DLL";//System.DLL文件的路径CompilerParameterscompilerparams=newCompilerParameters();compilerparams.OutputAssembly=path;CompilerResultsresults=compiler.CompileAssemblyFromFile(compilerparams,file);

对于henry兄的回复,是不是把动态编辑的程序输出到硬盘文件里,我不知道这里对添加现在模块的引用是怎么处理的 ?不知道大家明白我问的什么吗?我表达能力是不是很差?
解决方案十一:
我的意思是说,我在Comp模块里动态编辑一段代码,它是一个字符串变量,只不过里存的是代码的字符,比如说 stringcode="Controls.baseControl=newControls.baseControl();";就叫它动态代码吧。而这动态代码里又使到了baseControl类。这个类在Controls模块里,Controls模块和Comp模块都在同一解决方案里,都是这个解决方案里的项目。为了动态代码能运行。就得动态编辑,动态编辑得添加对Controls模块的引用我添加引用方法是:vCompilerParameters.ReferencedAssemblies.Add(typeof(Controls.baseControl).Module.FullyQualifiedName)//这样觉得太烂了,有好的方法吗?因为在运行时,Controls模块已经在内存里,我不想再通过去读硬盘文件,来添加引用。直接对已经存在内存里的Controls模块引用。vCompilerParameters.ReferencedAssemblies.Add(stringvalue)这个value只能是文件路径吗?
解决方案十二:
CompilerParametersparameters=newCompilerParameters();Assemblyab=Assembly.GetEntryAssembly();AssemblyName[]ans=ab.GetReferencedAssemblies();foreach(AssemblyNameassemblyNameinans){stringcodeBase=assemblyName.CodeBase;if(string.IsNullOrEmpty(codeBase)){parameters.ReferencedAssemblies.Add(assemblyName.Name+".dll");continue;}stringtempFileName=codeBase.StartsWith("file://")?codeBase.Substring(8):codeBase.Substring(codeBase.LastIndexOf("/")+1);parameters.ReferencedAssemblies.Add(tempFileName);}
解决方案十三:
学习,帮顶!

时间: 2016-02-18

c#动态编时,如何添加现有模块的引用的相关文章

Accessa如何在表添加现有字段

  ​1.打开你想要添加字段的数据表,然后点击菜单栏上的 数据表. 2.在数据表 选项中,我么点击 添加现有字段. 3.在界面的右边出现了 字段列表 的面板.,我们看到在这个面板中,有一个表,名字叫做"百度经验",我们点击左边这个加号,这样就展开了该表中的字段 计算字段"> 4.拖拽字段到表中,操作方法如下图. 5.弹出了添加字段的想到,我们双击可用字段中的字段就能添加字段到新的表,然后点击下一步 6.接着点击下一步 7.最后点击完成.

js动态给table添加/删除tr的方法

这篇文章介绍了js动态给table添加/删除tr的方法,有需要的朋友可以参考一下   复制代码 代码如下:  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="Edi

parallels desktop如何添加现有的虚拟机

  如何在parallels desktop中添加现有的虚拟机 操作一:先点击新建虚拟机按钮,跳出新建对话框; 图1:新建虚拟机 操作二:点击"添加现有的虚拟机"再选择要添加的.pvm文件; 图2:添加现有虚拟机 图3:选择.pvm文件 操作三:选择要添加的文件后直接点击"打开"就可以将虚拟机添加成功了,随机虚拟机窗口就可以打开了.

c++-我在头文件中通过添加现有项添加quote.h文件后,为何include是提示错误?

问题描述 我在头文件中通过添加现有项添加quote.h文件后,为何include是提示错误? 解决方案 你试一下把头文件放在和CPP一个目录下:或者写出quote.h完整路径. 解决方案二: #include后面有没有一个空格 解决方案三: 重启编译器,,,建议重建项目再试一次

动态库 添加函数-已编译好的动态库中添加一个函数

问题描述 已编译好的动态库中添加一个函数 RT,在Linux环境下,我有一个已经编译好的动态链接库,现在我想在没有源码的条件下,往这个库里面添加一个函数,有没有办法做到呢?请高手指教 解决方案 自己再生成一个库包装一下这个已有的库,并添加新的函数

android自己添加的模块在user模式下不编译的问题

android自己添加的模块在user模式下不编译的问题           我们在开发中,经常会碰到需要自己添加独立模块的时候,笔者以前也没太关心这个问题,以为写好Android.mk就可以了,其实还不是这么回事. /*****************************************************************************************************/声明:本博内容均由http://blog.csdn.net/sundeshe

JS动态给对象添加属性和值的实现方法_javascript技巧

如下所示: var obj={}; for(var i=0;i<10;i++){ eval("obj.p"+i+"="+i); } 以上就是小编为大家带来的JS动态给对象添加属性和值的实现方法全部内容了,希望大家多多支持~ 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索js 北京赛车冠亚和值技巧.时时彩和值技巧.福彩3d和值计算技巧.快3和值技巧.重庆时时彩和值技巧,以便于您获取更多的

js 动态给元素添加、移除事件的实现方法_javascript技巧

最近项目中要要到 js动态给给元素绑定事件,刚好之前没用到过这些,顺便学习一下,于是google了一下 事件,写了如下两个事件 一个添加事件 ,一个是移除事件 /addEventListener(),removeEventListener()用于处理指定和删除事件处理程序的操作 //作用域:事件处理程序会在其所属元素的作用域内运行 //addEventListener(event,function,capture/bubble);removeEventListener(event,functio

JS动态给对象添加事件的简单方法_javascript技巧

WEB项目中,我们常常会碰到要动态对相应的对象添加事件,如下,有id="txtPrice"的文本框控件: <div> <input type="text" id="txtPrice" name = "txtPrice" value = "0"/> <div> 现在我们为其动态添加一事件,JS核心代码如下: document.getElementById("txt