C# 写一个动态加载DLL的程序 怎么写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 写一个动态加载DLL的程序 怎么写?相关的知识,希望对你有一定的参考价值。
C#写一个动态加载C#编程的DLL 类库 实现那种即插即用的插件功能??求一份类似的DEMO 包含主程序 和 DLL 源码.......求高手给传一个~~~~~
我准备给你演示一下,
步骤如下:
我发一个exe和一个dll给你
你新建一个类库项目,引用我的dll,任意写个方法实现dll里面的接口,然后编译生成新的dll
这两个dll都与exe放在一个目录,然后你运行exe,就看到你编写的代码再exe里面运行,
你新建的那个dll就是我那个exe的插件。
如果你真的想尝试一下就留联系吧!
追问我要的EXE 和 DLL 的源码DEMO 需要知道怎么实现的,百度可以上传附件的吧
追答还是留联系吧,如果你能直接看懂的话,就不会在这里问问题了。
追问137269933 +Q
追答加了,不过才看到,还在么?
参考技术A 实现原理用反射,发个简单源码给你System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile("c://TestMyFile.dll");//加成程序集
//创建类实例
object obj = assembly.CreateInstance("TestMyFile.MyClass");//创建类MyClass的实例
obj.GetType().GetMethods();//获取所有方法
obj.GetType().GetProperties();//获取所有属性
TestMyFile.dll的代码
namespace TestMyFile
public class MyClass
private string _myname;
public string MyName
get return _myname;
set _myname = value;
public string GetName()
return MyName;
你还可以自己定义一个接口,然后让动态DLL实现这个接口,这样就更简单追问
能否把代码稍微具体一点
我通过 GetMethod 获取到了 GetName() 这个方法 那么怎么执行呢?
我通过 GetProperty 获取到了 MyName 怎么获取到他的值呢?
..................我说我是程序外的功能操作...不是编程过程中...
追答那要用接口反射啊,是不是这种啊 我举个例子啊,用户要用sql数据或者是acces数据,但是我不知道用户要用那种,我就两种都写,分别在两个dll中,然后编译,之后如果用户想用哪种数据库了,我就改下配置文件就行了,是不是想要这种效果啊
追问看二楼代码 就是我要的结果 只是还有一些问题
追答二楼的答案就是这样的饿,什么问题啊,
C#动态加载dll 时程序集的卸载问题
程序是个客户端控制台程序,因为部署在多台电脑上,所以是通过服务端通知客户端更新dll
客户端有多个线程同时调用一个dll里面的方法
var apdomain = AppDomain.CreateDomain(“test.dll”)
我为每个dll创建了一个程序池,并加入缓存,设置缓存时间为5分钟,绑定Cache 的OnRemoveCallback 事件,当这个程序集的缓存失效后,会掉用OnRemoveCallback 释放这个程序集 AppDomain.Unload(apdomain),然后再去服务端比对dll版本,有更新是把dll下载下来替换,
现在的问题就是当这个dll的程序集的缓存失效了,但是另一个线程还在执行这个dll里面的一个方法,还没执行完,这时候调用AppDomain.Unload(apdomain) 虽然没提示异常,但是这个时候那个dll还是被占用的,没发替换
问下各位有没有遇到过这样的问题,你们是怎么解决的呢
如果目标程序集是可执行程序,则可以令新建的域执行该代码,此时,在代码执行中突然卸载域,会从执行线程上引发AppDomainUnloadException异常。
跨应用程序域访问不是一种好的设计思路。本回答被提问者和网友采纳 参考技术B 暂时还没有遇到过这种奇葩问题
以上是关于C# 写一个动态加载DLL的程序 怎么写?的主要内容,如果未能解决你的问题,请参考以下文章