使用MS-Test执行测试时无法加载DLL

Jak*_*ker 3 c# mstest sevenzipsharp

在我的程序中,我使用SevenZipSharp生成zip文件。SevenZipSharp是一个托管DLL,它将加载另一个DLL 7z.dll。我使用SevenZipCompressor.SetLibraryPath手动将SevenZipSharp的路径设置为7z.dll。

当我在“调试”模式下执行程序时,一切正常,并且生成的zip文件非常好。但是,当我使用mstest执行单元测试时,SevenZipSharp始终会给我以下错误:

“测试方法引发异常:SevenZip.SevenZipLibraryException:无法加载7-zip库或内部COM错误!消息:无法加载库。”

我怀疑MSTest可能正在做某些事情阻止SevenZipSharp能够加载7z.dll,例如在一个安全沙箱中运行(或其他。我是C#和MSTest的新手...)

有谁知道会发生什么事吗?

谢谢!

use*_*178 5

尽管该问题提出了一个可疑的方案,但MSTest的一般问题是未加载所需的DLL,这似乎是一个常见的问题,值得一提。

  1. 默认情况下,MSTest会将测试容器认为需要的程序集复制到默认结果文件夹的“输出”文件夹中,每次运行时该文件夹都会更改。

  2. MSTest并不总是会自动自动正确推断出必要的程序集;如果没有显式直接引用程序集,则不会复制该程序集。此外,通常不会检测到本机DLL。

  3. 我不知道设置MSTest搜索路径的直接选项。您可以按照上面的建议使用procmon.exe确定搜索路径(基本上是标准的Windows DLL搜索)。

  4. 直觉上,默认搜索路径不包含启动目录,我认为这是造成混乱的原因。运行测试时,当前目录是测试结果“ Out”目录,而不是MSTest启动目录。

但是,它可以控制与MSTest的搜索行为(和复制行为)测试设置文件。您可以通过Visual Studio轻松创建和编辑这些设置(请参阅“测试”菜单),然后在MSTest命令行上指定创建的设置文件。您可以为Visual Studio和MSTest使用不同的设置文件。

通过这种方式,您可以精确控制将哪些DLL复制到测试目录中。请参阅创建测试设置以从Visual Studio运行自动化测试以获取有关此信息。

当然,DLL加载失败可能是由于缺少依赖关系所致,并且错误消息中提到的DLL 本身也可能存在。您可以使用依赖性查看器或procmon来拾取DLL中意外的依赖性。


Phi*_*mid 2

考虑使用Process Monitor (aka procmon.exe)优秀的SysInternals 工具来监视您的测试工具 (MSTest)。它会显示可执行文件在哪里寻找 7z.dll。