.net框架读书笔记---反射(三)

本文探讨了在.NET框架中如何通过卸载应用程序域来间接实现程序集的卸载。详细介绍了使用AppDomain.Unload方法的过程,并提供了一个示例代码,展示了创建新应用程序域、在其中加载程序集及随后卸载该应用程序域的方法。

接上一篇.net框架读书笔记---反射(二),前天学习了如何显示加载程序集,今天学习如何卸载程序集,CLR不支持单独卸载程序集的能力,它只支持卸载应用程序域。卸载应用程序域会导致包含在其中的所有程序集被卸载。

  卸载应用程序域非常简单,只需调用AppDomain的静态方法Unload,并为其传递希望卸载的AppDomain对象的引用即可。

  

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
namespace ReflectorStudy
{
class App
{
static void Main()
{

// 创建AppDomain
AppDomain ad = AppDomain.CreateDomain( " MyNewAppDomain " , null , null );

// 创建一个对象至新创建的AppDomain

SomeClass sc
= (SomeClass)ad.CreateInstanceAndUnwrap(Assembly.GetCallingAssembly().FullName, " SomeClass " );

sc.SomeMethod(Thread.GetDomain().FriendlyName);

// 卸载程序集
AppDomain.Unload(ad);

// 卸载之后再次调用会报异常
try
{
sc.SomeMethod(Thread.GetDomain().FriendlyName);
}
catch (AppDomainUnloadedException ex)
{
Console.WriteLine(ex.Message);
}

}
}
class SomeClass
{
public void SomeMethod( string sourceAppDomain)
{
Console.WriteLine(sourceAppDomain);
}
}
}

上面的代码在网应用程序域中创建新的对象时失败,不知道为什么?是不是因为是我环境的原因,家里的本本装的Win7,如果有人看到还望指点一二。

转载于:https://www.cnblogs.com/sanjia/archive/2010/05/25/1743888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值