【发布时间】:2015-04-16 07:39:27
【问题描述】:
我正在尝试加载程序集,使用Reflection 获取.dll 中的所有类,然后删除.dll。但是,在尝试删除 .dll 时,我遇到了拒绝访问异常。这不是因为访问权限,因为如果我不先加载 .dll,我可以删除它。
我在MSDN上看过,显然没有办法“卸载”,但我希望可能有另一种方式。
Assembly assembly;
assembly = Assembly.LoadFrom(filepath);
Type[] listOfAllClassInDll = assembly.GetTypes();
List<string> listOfAllClassNamesInDll = new List<string>();
foreach (Type classInDll in listOfAllClassInDll)
{
listOfAllClassNamesInDll.Add(classInDll.Name);
}
File.Delete(filepath);
【问题讨论】:
-
见stackoverflow.com/questions/225330/…或使用Mono.Cecil
-
@xanatos 似乎我的类中没有一个可以使用 ReflectionOnlyLoadFrom 加载,它们都抛出一个“ReflectionTypeLoadException”。不确定这是否是我可以通过某种方式解决的问题。
-
一般来说,如果你想卸载它们,你必须将它们加载到另一个 AppDomain 中。加载程序集然后卸载它们不是“好”的。他们可以在加载后做“事情”。出于这个原因,有
ReflectionOnlyLoadFrom。我建议你试试Mono.Cecil
标签: c# dll .net-assembly