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

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

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

  

代码
   
     
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,如果有人看到还望指点一二。

你可能感兴趣的:(.net)