1

我有代码需要我 Pinvoke 到第 3 方本机 DLL。问题是当我使用 Nunit 测试运行程序进行这些测试时,本机 dll 被 nunit 进程(nunit.exe 和 nubit-agent.exe)锁定。因此,我的构建后复制命令因此失败。

生成“成功构建”(包括构建后命令)的唯一方法是首先关闭 Nunit,重建项目并重新打开 Nunit(清洗、冲洗并重复)。这变得乏味和令人沮丧。

有没有办法强制单元将所有句柄释放到加载的程序集中?我对 NUnit 设置进行了一些探索,但无济于事。

旁注:我的其他想法与我实际使用这个 3rd 方 dll 的方式一致(它实际上是 QuantLib 的 C# SWIG 版本)。所以实际上可能存在包装 C# 代码和使用的 IDisposable 模式的问题(基于我收到的另一个问题的评论)。

4

1 回答 1

0

您可以使用解锁器等工具中的命令行选项来释放所有句柄。或者您可以将 pinvoke 函数加载到单独的应用程序域中,然后释放该域。

编辑:

在第二种情况下。创建 AppDomain 然后将 P/Invokes 的程序集加载到该域中,但不要将该程序集加载到主应用程序域中。然后在测试完成后卸载 App Domain。有关示例,请参见此处。 一旦域被卸载,P/Invoked Dlls 也应该被释放。

于 2010-10-07T07:56:30.537 回答