接上一篇.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);
}
}
}
{
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,如果有人看到还望指点一二。