如何为反射操作加载.NET程序集,然后卸载它?

我编写一个工具来报告有关在客户端系统中的环境和区域部署的.NET应用程序的信息。

我想读取这些程序集中的程序集属性的值。

这可以使用Assembly.ReflectionOnlyLoad来实现,然而即使这种方法保持加载组件。这里的问题是,我不能从不同的路径加载两个具有相同名称的程序集,所以自然我不能比较在不同系统中部署的相同的应用程序。

在这一点上,我假设解决方案将涉及使用临时AppDomains。

有人可以详细说明如何将一个程序集加载到另一个AppDomain,从它读取属性,然后卸载AppDomain?

这需要对文件系统上的程序集以及URL地址处的程序集工作。

MSDN documentation of System.Reflection.Assembly.ReflectionOnlyLoad (String)

The reflection-only context is no
different from other contexts.
Assemblies that are loaded into the
context can be unloaded only by
unloading the application domain.

因此,恐怕卸载程序集的唯一方法是卸载应用程序域。
要创建新的AppDomain并将组件加载到其中:

public void TempLoadAssembly()
{
    AppDomain tempDomain = AppDomain.CreateDomain("TemporaryAppDomain");
    tempDomain.DoCallBack(LoaderCallback);
    AppDomain.Unload(tempDomain);
}

private void LoaderCallback()
{
    Assembly.ReflectionOnlyLoad("YourAssembly");
    // Do your stuff here
}
http://stackoverflow.com/questions/225330/how-to-load-a-net-assembly-for-reflection-operations-and-subsequently-unload-it

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何为反射操作加载.NET程序集,然后卸载它?