AppDomain.CurrentDomain.CreateInstanceAndUnwrap()的问题 本帖最后由 s9969 于 2011-11-12 14:18:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为这个dll 没有被CurrentDomain加载进来。你可以使用:AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap例如:object obj = AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap("ClassAsm.dll", "NMFoo.CalcWithInterface");或者先用 Assembly.LoadFrom / LoadFile 加载 ------------------------------果然是的,谢谢大侠。另外小弟还有几点疑问请教下:(1)我尝试在解决方案里添加对ClassAsm.dll的引用,然后用CreateInstanceAndUnwrap()调用,结果没有成功,那么我想问下,“在解决方案里添加对ClassAsm.dll的引用”编译器做了什么?引用后的dll没有加载到程序域里吗?(2)对一个类型库(dll)中的类的调用,如果是早期绑定或者动态绑定的话,就要先在解决方案里添加对dll的引用,然后使用时用new实例化;而如果后期绑定的话,就是在使用时用一些Load()函数加载,再用CreateInstance()等函数实例化?是不是这个概念? 不会啊,如果已经添加了引用就可以直接 CreateInstanceFromAndUnwrap在程序启动后该assembly会被加载进来的。注意 CreateInstanceAndUnwrap 是Assembly的名字,是不带".dll"的。例:static void Main(string[] args){ dynamic test = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("ClassLibrary1", "ClassLibrary1.Class1"); Console.WriteLine(test.Echo("hi")); Console.Read();}另外如果是添加了引用了,可以直接用 System.Activator.CreateInstance具体查查MSDN吧(2) 是这样的。不管是new还是反射都要保证该dll被加载当前的Domain里。 C# 关于控件Windows Medio Player怎么连续播放歌曲?? 不许笑,关于观察者模式 打包部署的时候,如何不出现在添加删除程序中 请帮忙转换下代码 c++ 到 c# 或 vb.net 為什麼會有這樣的怪事發生?跟數據庫有關還是跟其它的有關? 取得当前DLL路径用哪个API 怎么样获得最后一条记录的DataGrid1.EditItemIndex,只知道第一条是0 C++程序员想学C#应该看哪些书比较好啊?? 图片存入ORACLE数据库问题,请教各位!100+100分 关于MSMQ-消息队列 实现百度文库的代码初始化时报错。 c# 如何实现弹出子窗口的不关闭时,其它的窗口无法操作
object obj = AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap("ClassAsm.dll", "NMFoo.CalcWithInterface");或者先用 Assembly.LoadFrom / LoadFile 加载
果然是的,谢谢大侠。
另外小弟还有几点疑问请教下:
(1)我尝试在解决方案里添加对ClassAsm.dll的引用,然后用CreateInstanceAndUnwrap()调用,结果没有成功,那么我想问下,“在解决方案里添加对ClassAsm.dll的引用”编译器做了什么?引用后的dll没有加载到程序域里吗?
(2)对一个类型库(dll)中的类的调用,如果是早期绑定或者动态绑定的话,就要先在解决方案里添加对dll的引用,然后使用时用new实例化;而如果后期绑定的话,就是在使用时用一些Load()函数加载,再用CreateInstance()等函数实例化?是不是这个概念?
不会啊,如果已经添加了引用就可以直接 CreateInstanceFromAndUnwrap
在程序启动后该assembly会被加载进来的。注意 CreateInstanceAndUnwrap 是Assembly的名字,是不带".dll"的。
例:
static void Main(string[] args)
{
dynamic test = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("ClassLibrary1", "ClassLibrary1.Class1");
Console.WriteLine(test.Echo("hi")); Console.Read();
}另外如果是添加了引用了,可以直接用 System.Activator.CreateInstance
具体查查MSDN吧(2) 是这样的。不管是new还是反射都要保证该dll被加载当前的Domain里。