在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载。在C#中我们也能使用Assembly.LoadFile实现动态加载DLL,但是当你试图卸载时,你会很惊讶的发现Assembly没有提供任何卸载的方法。这是由于托管代码的自动垃圾回收机制会做这件事情,所以C#不提供释放资源的函数,一切由垃圾回收来做。
当AppDomain被卸载的时候,在该环境中的所有资源也将被回收。关于AppDomain的详细资料参考MSDN。下面是使用AppDomain实现动态卸载DLL的代码,
当AppDomain被卸载的时候,在该环境中的所有资源也将被回收。关于AppDomain的详细资料参考MSDN。下面是使用AppDomain实现动态卸载DLL的代码,
namespace MyDemo.Context { class UnloadDll { static void Main(string[] args) { string callingDomainName = AppDomain.CurrentDomain.FriendlyName;//Thread.GetDomain().FriendlyName; Console.WriteLine(callingDomainName); AppDomain ad = AppDomain.CreateDomain("DLL Unload test"); ProxyObject obj = (ProxyObject)ad.CreateInstanceFromAndUnwrap(@"MyDemo.exe", "MyDemo.Context.ProxyObject"); obj.LoadAssembly(); obj.Invoke("Model.Person", "GetByID", 100); AppDomain.Unload(ad); obj = null; Console.ReadLine(); } } class ProxyObject : MarshalByRefObject { Assembly assembly = null; public void LoadAssembly() { string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Model.dll"); assembly = Assembly.LoadFile(file); } public bool Invoke(string fullClassName, string methodName, params Object[] args) { if (assembly == null) return false; Type tp = assembly.GetType(fullClassName); if (tp == null) return false; MethodInfo method = tp.GetMethod(methodName); if (method == null) return false; Object obj = Activator.CreateInstance(tp); method.Invoke(obj, args); return true; } } }
发表评论
-
C# 实现将文件夹分卷压缩
2015-04-17 17:01 1242http://bbs.csdn.net/topics/3907 ... -
C#发送邮件
2015-04-17 15:58 696public class SendEmailHelper ... -
C# xml文件读取
2015-02-11 16:08 648看附件................ -
什么时候该用委托,为什么要用委托,委托有什么好处....
2015-01-29 16:56 818http://www.cnblogs.com/superpce ... -
转:c#常用的18种设计模式
2015-01-21 08:16 777http://blog.jobbole.com/78130/ -
C#委托的介绍(delegate、Action、Func、predicate)
2015-01-09 17:26 1132http://www.cnblogs.com/akwwl/p/ ... -
接口和抽象类有什么区别 .
2014-12-22 16:35 617接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么 ... -
C#一个简单写日志文件的类
2014-12-11 09:57 1112/// <summary> /// L ... -
Linq初级班 Linq to DataSet体验(单表、多表联合查询JOIN语法)
2014-12-10 14:34 355http://www.cnblogs.com/huangcon ... -
C#泛型详解
2014-11-29 11:31 482我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处 ... -
线程同步与异步的区别
2014-11-26 09:12 883异步处理就是按照不同步的程序处理问题。异步处理与同步处理是对立 ... -
应用C#和SQLCLR编写SQL Server用户定义函数 .
2013-10-09 17:07 485http://blog.csdn.net/zhzuo/arti ... -
log4Net简介
2013-06-30 11:32 575使用log4Net可以将系统听日志保存到DB、日志文件、邮箱中 ... -
DataGridView历史记录的前进与后退操作
2013-06-23 11:13 1108此功能介绍:DataGridView频繁查询数据时,可以将每次 ... -
c# 对INI配置文件的读取操作
2013-06-17 10:51 678此种方法只对如下格式的INI文件起作用 server=loca ... -
对DataGridView控件的扩展开发
2013-06-15 21:47 2380首先在项目中引用 ... -
对集合控件(ListBox,ComboBox,TreeView,RichTextBox,DataGridView)的查找、替换操作控件
2013-06-15 09:39 1549一、程序入口: using System; using ... -
C#对文件、文件夹操作公用组件
2013-06-11 09:46 968namespace HR.Class.IO { / ... -
TreeView控件操作开发篇之(五)
2013-06-09 00:09 828#region 加载文件夹及文件到树 ... -
TreeView控件操作开发篇之(五)
2013-06-08 23:14 2#region "查找遍历树节点" ...
相关推荐
### C#中加载和卸载DLL #### 一、引言 在软件开发过程中,动态链接库(Dynamic Link Library,简称DLL)作为一种重要的模块化工具,广泛应用于多种编程语言中。在C++中,通过`LoadLibrary`和`FreeLibrary`函数可以...
本篇将深入探讨如何利用反射动态加载和卸载DLL,以及在实际应用中的场景。 首先,我们需要了解DLL(动态链接库)在Windows操作系统中的作用。DLL文件是一组可重用的函数和数据,多个应用程序可以共享它们,以减少...
在C#编程中,动态加载和卸载DLL是常见的需求,特别是在需要热更新或模块化设计的应用程序中。本文将详细介绍如何在C#中实现这一功能,主要涉及`AppDomain`和反射机制。 首先,动态加载DLL主要依赖于C#的`Reflection...
c# 实现动态加载c++ dll 动态库 本示例提供动态加载 卸载c++ dll动态库 所用工具 : visual studio ; 系统:Windows
在.NET框架中,C#程序员...通过以上解释,我们可以理解如何利用反射在C#中动态加载和执行DLL文件,以及在使用过程中需要注意的关键点。动态加载DLL是.NET开发中的一个重要技巧,它使得我们的应用程序更加灵活和可扩展。
DLL动态加载是指程序在运行时通过API调用来加载和卸载DLL,而不是在编译时将其链接到可执行文件中。这样可以减少程序的大小,提高资源利用率,并允许不同应用程序共享同一DLL。 2. **C#中的DllImportAttribute** ...
### C# 学习之常用技术 #### 一、事务处理:批量提交与回滚 在C#中,事务管理是...总结而言,通过上述两种方法,开发者可以在C#中有效地处理事务以及动态加载和卸载DLL,这对于构建灵活且高效的应用程序非常重要。
在.NET框架中,C#提供了一种机制,允许开发者实现DLL的热插拔,即在应用程序运行时动态加载和卸载DLL,而无需重启整个进程。这种功能主要通过`System.AppDomain`类来实现,它代表了.NET应用程序的一个独立执行环境。...
在C#编程中,有时我们需要将引用的DLL文件与主执行...请注意,这种方法仅适用于那些不需要在运行时动态加载或卸载的DLL。对于需要动态加载的库,可能需要使用其他技术,如.NET Framework的延迟加载特性或使用第三方库。
在.NET框架中,C#语言提供了强大的动态类型和运行时代码执行能力,使得开发者能够在程序运行过程中动态加载和使用DLL(动态链接库)文件。这个DEMO主要展示了如何利用C#来实现DLL的动态加载,这在很多场景下非常有用...
标题和描述中提到的知识点是关于在C#中动态加载DLL文件,并调用该DLL中包含的方法。这种方法在许多软件开发场景中非常有用,尤其是当需要在运行时加载和使用外部插件或组件时。 首先,动态加载DLL主要涉及到.NET...
- **灵活性**:DLL可以在运行时动态加载和卸载,提高了系统的响应速度。 - **模块化**:便于开发模块化的软件架构,有助于多语言版本的开发。 - **易于维护**:当DLL中的函数需要更新时,只需替换相应的DLL文件即可...
C#中动态调用DLL分为两种主要方式:静态加载和动态加载。静态加载是在编译时就确定了DLL的引用,而动态加载则是在运行时通过编程方式决定是否加载DLL。动态加载通常使用`DllImport`特性来实现,它允许C#程序调用非...
在C#中,动态加载DLL文件通常涉及到两个关键步骤:查找DLL文件和加载DLL中的类或方法。这个压缩包中的"PluginsTest"可能就是包含了一个简单的WPF应用,它展示了如何实现这些步骤。 1. **查找DLL文件**:通常,插件...
**四、延迟加载和卸载DLL** 1. **延迟加载**:使用`Assembly.LoadFrom()`方法可以在运行时按需加载DLL,减少程序启动时的资源消耗。 2. **卸载DLL**:.NET框架不支持直接卸载DLL,但可以通过重新加载应用程序域(`...
C# 插件框架灵活加载DLL是一个强大的技术实践,它允许开发者构建可扩展的应用程序,通过动态加载外部DLL(动态链接库)文件来实现特定功能。这种设计模式使得应用程序能够根据用户需求或环境变化,轻松地增加、更新...
这两个函数是Windows API的一部分,用于在运行时加载和调用DLL中的函数。`LoadLibrary`函数负责将DLL加载到进程地址空间,而`GetProcAddress`则用于获取DLL中特定函数的地址,以便后续调用。 1. `LoadLibrary`: 当...