有关“利用反射动态加载.DLL文件,创建该DLL文件中一个类的实例,序列化该实例并保存成二进制文件,读取二进制文件反序列化时出错”紧急求救

问题描述

各位前辈:实在是找不到如何解决这个问题。或者这个问题根本就没有办法解决?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被版主删除

时间: 2024-12-22 13:29:03

有关“利用反射动态加载.DLL文件,创建该DLL文件中一个类的实例,序列化该实例并保存成二进制文件,读取二进制文件反序列化时出错”紧急求救的相关文章

PHP通过反射动态加载第三方类和获得类源码的实例_php实例

使用反射动态加载第三方类 用反射加载第三方类用处在于: 使用XML或其他配文件配置要加载的类,从而和系统源代码分离. 对加载的类进行类检查,是加载的类符合自己定义的结构. <?php abstract class Module { #核心Module类库 function baseFunc() { echo "I am baseFunc"; } abstract function execute(); } class ModuleRunner { private $configD

关于C#反射问题,动态加载

问题描述 关于C#反射问题,动态加载 利用反射动态加载了A.DLL.但是A.DLL有个依赖项B.DLL或者其他什么文件.我反射A.DLL之后提示我没有找到B.DLL,我该怎么做才能让反射创建的实例去指定路径寻找B.DLL或者其他文件 解决方案 参考c#实现动态加载Dll 解决方案二: C# 反射动态加载窗口

Silverlight动态加载DLL

问题 今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下: 问题是这样的: 1,silverlightApplication1中有一个按钮,点击后弹出窗口:silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件. 2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件

一起谈.NET技术,Silverlight动态加载DLL

问题 今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下: 问题是这样的: 1,silverlightApplication1中有一个按钮,点击后弹出窗口:silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件. 2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件

利用xwizard.exe加载dll

本文讲的是利用xwizard.exe加载dll,在之前的文章介绍了利用Excel.Application object's RegisterXLL()加载dll的技巧.本文继续,介绍最近学习到的一种更为通用的方法--利用xwizard.exe加载dll.  该方法最大的特点是xwizard.exe自带微软签名,在某种程度上说,能够绕过应用程序白名单的拦截. 0x01 简介 本文将要介绍以下内容: · xwizard.exe简介 · 利用思路 · 实际测试 0x02 xwizard.exe简介 应

VC中动态加载ODBC解决方法

在使用 VC. VB. Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源.对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作.      而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷.为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法. 方法一:修改注册表 设计思路 一般情况下,当用户在控制面板中配置好

另类的动态加载用户控件

在BS架构这块,我们平时建一个网站,通常是创建一个WebSite网站,或者是创建一个WebApplication.然后在WEB项目里面建立相应的aspx文件,以及用户控件,自定义控件等等.但是做为一个新加入此项目的你要去修改里面的 某一个功能模板,那么我一般的程序是这样的: 第一:根据新的需求,在项目找到相关页面,例如对应的页面URL为index.aspx.此时可以对原页面做最初的了解. 第二:分析代码. 第三:根据新的需求来修改代码. 我想这也是一般朋友的思维模式吧.可是这样的流程并不是统一不

《AR与VR开发实战》——第3章 AR内容交互 3.1 动态加载AR模型

本节书摘来自华章出版社<AR与VR开发实战>一书中的第章,第3.1节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问"华章计算机"公众号查看. 3.1 动态加载AR模型 在第2章中我们实现了通过Vufoira默认方式识别并显示三维模型.默认的加载模型是通过将3D物体直接放置在场景中并作为识别目标的子物体来实现的,这种实现方式的问题是,当场景中有很多识别目标后,需要一次性加载的模型内容会占用很大的内存.因此,在实际项目案例中需要动态加载识别目标对应的模型,在识别丢失之后删除

ASP.NET中实现模版的动态加载

ASP.NET中,经常会使用到templates(模版)功能,比如在datagrid,datalist,repeater等控件中,使用templates,将会大大增强其功能.以往,我们一般是在设计程序时,就已经设置好控件中的模版是怎样的了.但是,有的时候,可能我们需要动态加载模版,比如,当你要求你的应用程序的界面风格随着用户的需求而变化时,你就需要到动态加载模版的功能了.但要注意的是,并不是所有的web控件都支持模版功能,而且要注意,哪些控件支持模版的哪些功能,下面简单列出了一些支持模版功能的控