Я загружаю DLL
через System.Reflection.Assembly.LoadFile
и размышляя над его членами в системе плагинов.
Мне нужно иметь возможность обновлять/перезаписывать эти DLL
во время работы системы, но кажется, что после вызова System.Reflection.Assembly.LoadFile
файл впоследствии заблокирован.
Кто-нибудь знает способ разблокировать файл?
Я прочитал о загрузке файла в отдельный appdomain? Есть ли подводные камни для этого подхода?
Файл System.Reflection.Assembly.LoadFile Locks
Ответ 1
Если вы используете это:
System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))
Он не будет блокировать файл.
Изменить
Пока это работает, это не лучшее решение, но лучший способ сделать это гораздо более активно (слишком много для простого вставки всего кода здесь для него).
Я создал публичный репозиторий в Github здесь со всем кодом для этого правильно:
Загрузка сборок без блокировки с помощью теневого копирования.
Ответ 2
Использовать Microsoft.Cci, включенную в Microsoft FxCop
Образец для версии 1.35:
using Microsoft.Cci;
// [...]
AssemblyNode assembly = AssemblyNode.GetAssembly(path);