我正在使用Visual Studio 2008开发Windows 7。
我有一个.NET程序集,它使用P / Invoke调用本机DLL。我在Visual Studio解决方案中设置了一个单独的.NET单元测试项目,通过对其进行各种调用来测试程序集。但是,当单元测试调用程序集,并且程序集使用P / Invoke进行调用时,它无法找到本机DLL。
当我编写一个独立的.NET控制台应用程序时,没有问题。程序集可以使用P / Invoke并成功找到DLL。
在使用程序集之前,我可以通过使用DLL的绝对路径调用LoadLibrary来进行单元测试。然而,这种方法很难看并且需要一条绝对路径 - 这对其他用户来说会有问题。
简而言之,我的问题是 - 如何指定或修改正在执行Visual Studio单元测试时使用的DLL搜索路径?
非常感谢任何帮助。
此致 丹
答案 0 :(得分:3)
听起来问题是你的本机DLL没有与你的单元测试DLL一起部署。这不是一个不常见的问题,因为托管DLL没有引用元数据中的本机,因此部署包不知道部署它们。
最合适的解决方案是修复部署而不是更改DLL搜索路径。这是一个单元测试的具体问题。你能告诉我们你正在使用什么框架,我们可以帮助你吗?
答案 1 :(得分:3)
如果您使用的是Visual Studio 2008集成测试框架,则应查看DeploymentItemAttribute Class
基本上,您只需使用此属性修饰测试方法,它会在测试执行之前自动将部署项复制到输出目录中。您甚至可以使用此复制整个依赖关系树。它支持可变扩展和相对路径。
另请参阅How to: Configure Test Deployment以获取有关VS2008测试部署的更多一般信息。
答案 2 :(得分:0)
我的解决方案是在我的测试项目中添加一个post build命令,如下所示:
xcopy /Y /S "$(SolutionDir)\ShredLibraries\*" "$(TargetDir)"
这在msdn docs中解释: https://msdn.microsoft.com/en-us/library/ms182475.aspx