Я пытаюсь загрузить сборку, используйте 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);
См http://stackoverflow.com/questions/225330/how-to-load-a-net-assembly -for-reflection-operations-and-then-unload-it или использовать Mono.Cecil – xanatos
@xanatos Кажется, что ни один из моих классов не может быть загружен с помощью ReflectionOnlyLoadFrom, все они бросают «ReflectionTypeLoadException». Не уверен, что это проблема, с которой я могу обойти некоторые способы. – Ralt
В общем случае вам придется загрузить их в другой AppDomain, если вы хотите их выгрузить. «Неплохо» загружать сборки, а затем просто выгружать их. Они могут делать «вещи» при загрузке. По этой причине существует 'ReflectionOnlyLoadFrom'. Я предлагаю вам попробовать «Mono.Cecil» – xanatos