我正在尝试加载程序集,使用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);
答案 0 :(得分:1)
实际上你不能直接做到这一点.. 原因如下:http://blogs.msdn.com/b/jasonz/archive/2004/05/31/145105.aspx
但是您可以在另一个AppDomain中动态加载程序集。然后当你不需要你的程序集时 - 你必须用加载的程序集卸载你的AppDomain。
答案 1 :(得分:0)
您可以使用Load with File.ReadAllBytes而不是使用LoadFrom / LoadFile。在这里,您不直接使用汇编文件,而是阅读它的内容并使用读取数据。因此,您可以自由重命名/删除文件。
您的代码将如下所示:
Assembly assembly;
assembly = Assembly.Load(File.ReadAllBytes(filepath));
Type[] listOfAllClassInDll = assembly.GetTypes();
List<string> listOfAllClassNamesInDll = new List<string>();
foreach (Type classInDll in listOfAllClassInDll)
{
listOfAllClassNamesInDll.Add(classInDll.Name);
}
File.Delete(filepath);
希望这会有所帮助:)