Подтвердить что ты не робот

Файл System.Reflection.Assembly.LoadFile Locks

Я загружаю DLL через System.Reflection.Assembly.LoadFile и размышляя над его членами в системе плагинов. Мне нужно иметь возможность обновлять/перезаписывать эти DLL во время работы системы, но кажется, что после вызова System.Reflection.Assembly.LoadFile файл впоследствии заблокирован.
Кто-нибудь знает способ разблокировать файл?
Я прочитал о загрузке файла в отдельный appdomain? Есть ли подводные камни для этого подхода?

4b9b3361

Ответ 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);