Как заставить Nunit освободить дескрипторы на собственных DLL? - PullRequest
1 голос
/ 07 октября 2010

У меня есть код, который требует от меня Pinvoke в стороннюю DLL.Проблема заключается в том, что, когда я использую тестовый модуль Nunit для этих тестов, собственная dll блокируется процессами nunit (nunit.exe и nubit-agent.exe).Таким образом, моя команда копирования после сборки не выполняется из-за этого.

Единственный способ создать «успешную сборку» (включая команду после сборки) - это сначала закрыть Nunit, пересобрать проект и заново открыть Nunit (Вымойте, промойте и повторите).Это становится утомительным и разочаровывающим.

Есть ли способ заставить устройство освободить все ручки на загруженных сборках?Я немного поэкспериментировал с настройками NUnit, но безрезультатно.

Примечание: У меня были и другие мысли о том, как я на самом деле использую эту стороннюю DLL (на самом деле это версия C # SWIG QuantLib).Так что на самом деле могут быть проблемы с кодом оболочки C # и используемым шаблоном IDisposable (на основе комментария, который я получил по другому вопросу).

1 Ответ

0 голосов
/ 07 октября 2010

Вы можете использовать параметр командной строки из такого инструмента, как unlocker, чтобы освободить все дескрипторы . Или вы можете загрузить функции pinvoke в отдельный домен приложения, а затем освободить домен.

Edit:

Во втором случае. Когда создаете домен AppDomain, а затем загружаете сборку, которую P / вызывает в этот домен, но не загружайте эту сборку в основной домен приложения. Затем, когда тестирование закончится, выгрузите домен приложения. См. Здесь пример. Как только домен выгружен, P / Invoked Dlls также должны быть освобождены.

...