问题描述
各位前辈:实在是找不到如何解决这个问题。或者这个问题根本就没有办法解决?stringpath=@"E:Temp.dll";Assemblyassembly=Assembly.LoadFrom(path);AppDomain.CurrentDomain.Load(assembly.GetName());IControllercontroller=null;///遍历程序集中的所有类型;Type[]plugTypes=assembly.GetTypes();foreach(TypeplugTypeinplugTypes){if((plugType.IsPublic)&&(!plugType.IsAbstract)){if(plugType.GetInterface("IControllerPlug")!=null){IControllerPlugtemp=(IControllerPlug)Activator.CreateInstance(plugType);controller=temp.Controller;}}}BinaryFormatterbinaryFormatter=newBinaryFormatter();MemoryStreamstream=newMemoryStream();binaryFormatter.Serialize(stream,controller);stream.Seek(0,SeekOrigin.Begin);IControllertest=(IController)binaryFormatter.Deserialize(stream);在最后代码,反序列化时出现一下错误:无法找到程序集“Temp,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”。有哪位大哥能帮小弟解决。我可以专门注册用户给您送分。可以跟帖或者把解决方法发到我的邮箱:plutoli@163.com中。多谢多谢
解决方案
解决方案二:
你的那个temp.dll不在.net搜索程序集的的范围内出于安全考虑被后load上来的程序集合,你需要自己去找位置[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);AppDomain.CurrentDomain.AssemblyResolve+=newResolveEventHandler(CurrentDomain_AssemblyResolve);Application.Run(newForm1());}staticSystem.Reflection.AssemblyCurrentDomain_AssemblyResolve(objectsender,ResolveEventArgsargs){//thrownewException("Themethodoroperationisnotimplemented.");System.Reflection.Assemblyass=null;stringname=args.Name;//根据name取得Assemblyreturnass;}可以参考AppDomain.CurrentDomain.AssemblyResolve的msdn
解决方案三:
帮顶,楼上的都回答了
解决方案四:
你dll里面所有的类都能序列化吗?每个类都加上[serizable]属性
解决方案五:
没认真看你的代码,但我猜是你的dll没有签名,要强类型的dll才行,你可以用.netframework自带的sn.exe工具对程序集进行签名即可.我也遇到过你的问题.这里有篇反射的技术文章,给你参考下http://blog.csdn.net/go2newlife/archive/2007/11/27/1904687.aspx
解决方案六:
该回复于2007-12-04 11:18:09被版主删除