Я также знаю, что это очень старый, но может помочь кому-то, у кого эта проблема! Вот один из способов, который я нашел для этого! вместо использования:
var assembly = Assembly.LoadFrom( FilePathHere );
используйте это:
var assembly = Assembly.Load( File.ReadAllBytes(FilePathHere));
Это фактически загружает «Содержание» файла сборки, а не самого файла. Это означает, что в файле сборки нет блокировки файлов! Таким образом, теперь он может быть скопирован, удален или обновлен без закрытия приложения или пытается использовать отдельный AppDomain или Marshaling!
PROS: Очень просто исправить с помощью 1 Liner кода! CONS: Невозможно использовать AppDomain, Assembly.Location или Assembly.CodeBase.
Теперь вам просто нужно уничтожить все экземпляры, созданные на сборке. Например:
assembly = null;