У меня есть приложение, использующее .NET Framework 4.6.2.
Это служебное приложение, которое используется для обновления другого программного обеспечения, расположенного в той же папке. Для этого он загружает zip-архив через вызов API, а затем распаковывает его в папку сразу после удаления всего существующего содержимого.
В рамках этого приложения ему необходимо прочитать некоторые файлы JSON перед процессом извлечения (поскольку он также распаковывает некоторое программное обеспечение в другие каталоги, указанные внутри json), для чего я использую Newtonsoft.JSON. Проблема в том, что Newtonsoft.Json.dll — это один из файлов в архиве. Потенциально его необходимо обновить, если мы начнем использовать более новую версию библиотеки (она используется как приложением обновления, так и другими исполняемыми файлами, которые находятся в этой папке).
После создания несколько вызовов с помощью Newtonsoft.Json в приложении обновления, я знаю, что больше не буду его использовать, поэтому надеялся удалить его и распаковать из .zip. Однако файл заблокирован приложением, поэтому я не могу удалить его с помощью простого метода FileInfo.delete(). В ошибке говорится, что «Доступ к пути Newtonsoft.Json.dll запрещен» (по понятным причинам)
Могу ли я каким-либо образом принудительно удалить его? Повторю и подчеркну: к тому моменту, когда я хочу удалить .dll, я уверен, что не буду использовать какие-либо его функции до следующего запуска.
Или, альтернативно, есть ли какой лучший обходной путь для этого сценария вы бы порекомендовали?
UPD: Сейчас я рассматриваю два альтернативных варианта:
1) Использование Costura. Фоди, чтобы встроить dll в приложение и сделать ее независимой от .dll в папке
2) Переименование неудачно извлеченных файлов в filename.dll.new и запуск пакетного сценария, который найдет их все и заменит (запускается (отсоединяется) приложением перед выходом)
Подробнее здесь: https://stackoverflow.com/questions/788 ... mework-app