3

我正在使用 Visual Studio 2008 在 Windows 7 上工作。

我有一个使用 P/Invoke 调用本机 DLL 的 .NET 程序集。我在我的 Visual Studio 解决方案中设置了一个单独的 .NET 单元测试项目,该项目通过对程序集进行各种调用来测试程序集。但是,当单元测试调用程序集,并且程序集使用 P/Invoke 进行调用时,它找不到本机 DLL。

当我编写一个独立的 .NET 控制台应用程序时,没有问题。程序集可以使用 P/Invoke 并成功找到 DLL。

在使用程序集之前,我可以通过使用 DLL 的绝对路径调用 LoadLibrary 来使单元测试工作。但是,这种方法很丑陋,并且需要绝对路径——这对其他用户来说是个问题。

简而言之,我的问题是 - 如何指定或修改执行 Visual Studio 单元测试时使用的 DLL 搜索路径?

任何帮助将不胜感激。

问候,丹

4

3 回答 3

3

如果您使用的是 Visual Studio 2008 集成测试框架,您应该查看DeploymentItemAttribute 类

基本上,您只需使用此属性装饰您的测试方法,它会在测试执行之前自动将部署项复制到输出目录中。您甚至可以使用它复制整个依赖树。它支持变量扩展和相对路径。

另请参阅如何:配置测试部署以获取有关 VS2008 测试部署的更多一般信息。

于 2011-11-09T16:20:59.500 回答
3

听起来问题是您的本机 DLL 没有与您的单元测试 DLL 一起部署。这不是一个不常见的问题,因为托管 DLL 在元数据中没有对本机的引用,因此部署包不知道如何部署它们。

最合适的解决方案是修复部署而不是更改 DLL 搜索路径。这是一个单元测试特定的问题。您能告诉我们您正在使用什么框架,以便我们为您提供帮助吗?

于 2010-08-20T17:41:31.087 回答
0

我的解决方案是在我的测试项目中添加一个构建后命令,如下所示:

xcopy /Y /S "$(SolutionDir)\ShredLibraries\*" "$(TargetDir)"

这在 msdn 文档中进行了解释: https ://msdn.microsoft.com/en-us/library/ms182475.aspx

于 2016-03-11T09:37:09.683 回答