Файл блокировки System.Reflection.Assembly.LoadFile - PullRequest
38 голосов
/ 23 июня 2009

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

Ответы [ 2 ]

67 голосов
/ 23 июня 2009

Если вы используете это:

 System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))

Не заблокирует файл.

Редактировать


Хотя это работает, это не лучшее решение , но лучший способ сделать это намного сложнее (слишком много, чтобы просто вставить весь код здесь).

Я создал публичный репозиторий на Github здесь со всем кодом для правильной работы:

Загрузка сборок без блокировки с использованием теневого копирования.

0 голосов
/ 04 августа 2009

Используйте Microsoft.Cci, включенный в Microsoft FxCop

Образец для версии 1.35:

using Microsoft.Cci;
// [...]
AssemblyNode assembly = AssemblyNode.GetAssembly(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...